사용 규칙

사용 규칙은 .NET의 적절한 사용을 지원합니다.

이 섹션의 내용

규칙 설명
CA1801: 사용되지 않은 매개 변수를 검토하십시오. 메서드 시그니처에 메서드 본문에서 사용되지 않는 매개 변수가 있습니다.
CA1816: GC.SuppressFinalize를 올바르게 호출하십시오. Dispose 구현인 메서드가 GC.SuppressFinalize를 호출하지 않거나, Dispose 구현이 아닌 메서드가 GC.SuppressFinalize를 호출하거나, 메서드가 GC.SuppressFinalize를 호출하고 this(Visual Basic의 경우 Me) 이외의 값을 전달합니다.
CA2200: 스택 정보를 유지하도록 다시 throw하십시오. 예외가 다시 throw되며 예외가 throw 문에 명시적으로 지정되어 있습니다. throw 문에 예외를 지정하여 예외가 다시 throw되면 예외를 throw한 원래 메서드와 현재 메서드 간의 메서드 호출 목록이 손실됩니다.
CA2201: 예약된 예외 형식을 발생시키지 마십시오. 이로 인해 원래 오류를 탐지 및 디버그하기 어려워집니다.
CA2207: 값 형식 정적 필드를 인라인으로 초기화하십시오. 값 형식에서 명시적인 정적 생성자를 선언합니다. 이 규칙 위반 문제를 해결하려면 모든 정적 데이터를 선언할 때 초기화하고 정적 생성자를 제거합니다.
CA2208: 인수 예외를 올바르게 인스턴스화하십시오. ArgumentException 또는 ArgumentException에서 파생된 예외 형식의 기본(매개 변수가 없는) 생성자를 호출했거나, ArgumentException 또는 ArgumentException에서 파생된 예외 형식의 매개 변수가 있는 생성자에 잘못된 문자열 인수가 전달되었습니다.
CA2211: 비상수 필드는 노출되면 안 됩니다. 상수 또는 읽기 전용이 아닌 정적 필드는 스레드로부터 안전하지 않습니다. 해당 필드에 대한 액세스는 신중하게 제어해야 하며 클래스 개체에 대한 액세스를 동기화하는 고급 프로그래밍 기술을 필요로 합니다.
CA2213: 삭제 가능한 필드는 삭제해야 합니다. System.IDisposable을 구현하는 형식은 IDisposable을 구현하는 형식의 필드를 선언합니다. 필드의 Dispose 메서드가 선언 형식의 Dispose 메서드에 의해 호출되지 않습니다.
CA2214: 재정의 가능한 메서드를 생성자에서 호출하지 마십시오. 생성자가 가상 메서드를 호출할 때 해당 메서드를 호출하는 인스턴스의 생성자가 실행되지 않았을 수 있습니다.
CA2215: Dispose 메서드는 기본 클래스 Dispose를 호출해야 합니다. 형식이 삭제 가능한 형식에서 상속되면 해당 형식은 자체 Dispose 메서드에서 기본 형식의 Dispose 메서드를 호출해야 합니다.
CA2216: 삭제 가능한 형식은 종료자를 선언해야 합니다. System.IDisposable을 구현하며 관리되지 않는 리소스를 사용하도록 제안하는 필드가 있는 형식은 Object.Finalize에 설명된 대로 종료자를 구현하지 않습니다.
CA2217: 열거형을 FlagsAttribute로 표시하지 마십시오. 외부에 표시되는 열거형은 FlagsAttribute를 사용하여 표시되며 2의 거듭제곱 또는 열거형에서 정의된 다른 값의 조합이 아닌 하나 이상의 값을 가집니다.
CA2218: Equals를 재정의할 때 GetHashCode를 재정의하십시오. 퍼블릭 형식은 System.Object.Equals를 재정의하지만 System.Object.GetHashCode를 재정의하지 않습니다.
CA2219: exception 절에서 예외를 발생시키지 마십시오. finally 또는 fault 절에서 예외가 발생하는 경우 새 예외가 활성 예외를 숨깁니다. 필터 절에서 예외가 발생하면 런타임에서 자동으로 예외를 catch합니다. 이로 인해 원래 오류를 탐지 및 디버그하기 어려워집니다.
CA2224: 같음 연산자를 오버로드할 때 Equals를 재정의하십시오. 퍼블릭 형식은 같음 연산자를 구현하지만 System.Object.Equals를 재정의하지 않습니다.
CA2225: 연산자 오버로드에는 명명된 대체 항목이 있습니다. 연산자 오버로드가 감지되었으며 예상되는 이름의 대체 메서드를 찾을 수 없습니다. 명명된 대체 멤버는 연산자와 동일한 기능에 대한 액세스를 제공하며 해당 멤버는 오버로드된 연산자를 지원하지 않는 언어로 프로그래밍하는 개발자에게 제공됩니다.
CA2226: 연산자에는 대칭 오버로드가 있어야 합니다. 형식은 같음 또는 같지 않음 연산자를 구현하지만 반대 연산자는 구현하지 않습니다.
CA2227: 컬렉션 속성은 읽기 전용이어야 합니다. 쓰기 가능한 컬렉션 속성을 통해 사용자는 컬렉션을 다른 컬렉션으로 바꿀 수 있습니다. 읽기 전용 속성은 컬렉션을 바꾸지 못하도록 하지만 개별 멤버를 설정하는 것은 여전히 가능합니다.
CA2229: serialization 생성자를 구현하십시오. 이 규칙 위반 문제를 해결하려면 serialization 생성자를 구현합니다. 봉인 클래스의 경우에는 생성자를 private으로 만들고, 그 밖의 경우에는 protected로 만듭니다.
CA2231: ValueType.Equals를 재정의할 때 같음 연산자를 오버로드하십시오. 값 형식은 Object.Equals를 재정의하지만 같음 연산자를 구현하지 않습니다.
CA2234: 문자열 대신 System.Uri 개체를 전달하십시오. 이름에 "uri", "URI", "urn", "URN", "url" 또는 "URL"이 포함된 문자열 매개 변수가 있는 메서드가 호출되었습니다. 메서드의 선언 형식에는 System.Uri 매개 변수를 포함하는 해당 메서드 오버로드가 들어 있습니다.
CA2235: 모두 serialize할 수 없는 필드로 표시하십시오. serialize할 수 없는 형식의 인스턴스 필드가 serialize할 수 있는 형식에 정의되었습니다.
CA2237: ISerializable 형식을 SerializableAttribute로 표시하십시오. 공용 언어 런타임에서 직렬화가 가능하다고 인식되려면 형식이 ISerializable 인터페이스 구현을 통해 사용자 지정 serialization 루틴을 사용하는 경우에도 SerializableAttribute 특성을 사용하여 형식을 표시해야 합니다.
CA2241: 형식 메서드에 올바른 인수를 제공하십시오. String.Format으로 전달된 format 인수에 각 개체 인수에 해당하는 format 항목이 포함되지 않으며 그 반대의 경우도 마찬가지입니다.
CA2242: NaN에 대해 정확하게 테스트하십시오. 이 식은 Single.Nan 또는 Double.Nan에 대해 값을 테스트합니다. Single.IsNan(Single) 또는 Double.IsNan(Double)을 사용하여 값을 테스트합니다.
CA2243: 특성 문자열 리터럴이 올바르게 구문 분석되어야 합니다. 특성의 문자열 리터럴 매개 변수가 URL, GUID 또는 버전에 대해 구문을 올바르게 분석하지 않습니다.
CA2244: 인덱싱된 요소 초기화를 중복하지 마세요. 개체 이니셜라이저에 동일한 상수 인덱스를 포함하는 두 개 이상의 인덱싱된 요소 이니셜라이저가 있습니다. 마지막 이니셜라이저 외에 모두 중복됩니다.
CA2245: 자체에 속성을 할당하지 마세요. 속성이 실수로 속성 자체에 할당받았습니다.
CA2246: 동일한 문에 기호와 해당 멤버를 할당하지 마세요. 동일한 문에서는 기호 및 해당 멤버(필드 또는 속성)를 할당하지 않는 것이 좋습니다. 멤버 액세스가 할당 전 기호의 이전 값을 사용하거나 해당 문에 있는 할당의 새 값을 사용해야 했는지 분명하지 않습니다.
CA2247: TaskCompletionSource 생성자에 전달된 인수는 TaskContinuationOptions 열거형 대신 TaskCreationOptions 열거형이어야 합니다. TaskCompletionSource에는 기본 작업을 제어하는 TaskCreationOptions를 사용하는 생성자와 작업에 저장된 개체 상태를 사용하는 생성자가 포함됩니다. 실수로 TaskCreationOptions 대신 TaskContinuationOptions를 전달하면 호출이 옵션을 상태로 처리합니다.
CA2248: ‘Enum.HasFlag’에 올바른 ‘enum’ 인수를 제공하세요 HasFlag 메서드 호출에 인수로 전달된 열거형 형식이 호출하는 열거형 형식과 다릅니다.
CA2249: String.IndexOf 대신 String.Contains를 사용하는 것이 좋습니다. 결과가 하위 문자열의 존재 여부를 확인하는 데 사용되는 string.IndexOf 호출은 string.Contains로 바꿀 수 있습니다.
CA2250: ThrowIfCancellationRequested 사용 ThrowIfCancellationRequested는 토큰이 취소되었는지 여부를 자동으로 확인하고, 취소된 경우 OperationCanceledException을 throw합니다.
CA2251: String.Compare 대신 String.Equals 사용 String.Compare의 결과를 0과 비교하는 대신 String.Equals를 사용하는 것이 보다 명확하고 빠릅니다.
CA2252: 미리 보기 기능 옵트인 미리 보기 API를 사용하기 전에 미리 보기 기능을 옵트인합니다.
CA2253: 명명된 자리 표시자는 숫자 값이 아니어야 합니다. 로깅 메시지 템플릿의 명명된 자리 표시자는 숫자 문자로만 구성해서는 안 됩니다.
CA2254: 템플릿은 정적 식이어야 합니다. 로깅 메시지 템플릿은 호출마다 달라서는 안 됩니다.
CA2255: ModuleInitializer 특성을 라이브러리에서 사용해서는 안 됩니다. 모듈 이니셜라이저는 애플리케이션 코드가 실행되기 전에 애플리케이션의 구성 요소가 초기화되도록 하기 위해 애플리케이션 코드에서 사용됩니다.
CA2256: 부모 인터페이스에 선언된 모든 멤버는 DynamicInterfaceCastableImplementation 특성 인터페이스에 구현이 있어야 합니다. 형식을 구현하는 DynamicInterfaceCastableImplementationAttribute 형식에 대한 인터페이스 구현으로 작동하는 특성이 있는 형식입니다 IDynamicInterfaceCastable . 따라서 구현하는 형식이 그렇지 않으면 제공하지 않으므로 상속된 인터페이스에 정의된 모든 멤버의 구현을 IDynamicInterfaceCastable 제공해야 합니다.
CA2257: 'DynamicInterfaceCastableImplementationAttribute'가 있는 인터페이스에 정의된 멤버는 'static'이어야 합니다. 구현 IDynamicInterfaceCastable 하는 형식은 메타데이터에서 동적 인터페이스를 구현하지 않을 수 있으므로 이 형식에 정의된 명시적 구현이 아닌 인스턴스 인터페이스 멤버에 대한 호출은 런타임에 실패할 수 있습니다. 런타임 오류를 방지하려면 새 인터페이스 멤버 static 를 표시합니다.
CA2258: Visual Basic에서 'DynamicInterfaceCastableImplementation' 인터페이스를 제공하는 것은 지원되지 않습니다. 기능 DynamicInterfaceCastableImplementationAttribute특성 인터페이스를 제공하려면 Visual Basic에서 지원되지 않는 기본 인터페이스 멤버 기능이 필요합니다.
CA2259: ThreadStatic이 정적 필드에만 사용되는지 확인 ThreadStaticAttribute는 (SharedVisual Basic에서) 필드에만 영향을 줍니다 static . 인스턴스 필드에 적용된 특성은 동작에 영향을 주지 않습니다.
CA2260: 제네릭 수학 인터페이스를 올바르게 구현 제네릭 수학 인터페이스를 사용하려면 파생 형식 자체를 자체 되풀이 형식 매개 변수에 사용해야 합니다.
CA2261: ConfigureAwaitOptions.SuppressThrowingTask<TResult>와 함께 사용하지 마세요. ConfigureAwaitOptions.SuppressThrowing 옵션은 제네릭 Task<TResult>에서 지원되지 않습니다. 이 경우 잘못된 TResult옵션이 반환될 수 있기 때문에 지원되지 않습니다.
CA2262: 제대로 설정 MaxResponseHeadersLength 값이 MaxResponseHeadersLength 올바르게 제공되었는지 확인합니다. 이 값은 킬로바이트 단위로 측정됩니다.
CA2264: null을 허용하지 않는 값을 'ArgumentNullException.ThrowIfNull'에 전달하지 마세요. 전달된 인수가 'null'이면 'ArgumentNullException.ThrowIfNull'이 throw됩니다. null을 허용하지 않는 구조체와 'nameof()' 및 'new' 식과 같은 특정 구문은 null이 아닌 것으로 알려져 있으므로 'ArgumentNullException.ThrowIfNull'은 throw되지 않습니다.
CA2263: 형식이 알려진 경우 제네릭 오버로드를 선호함 제네릭 오버로드를 사용하는 것은 형식이 알려진 경우 인수를 전달하는 System.Type 것이 좋습니다. 이는 향상된 컴파일 시간 검사 사용하여 클린 및 보다 형식이 안전한 코드를 승격하기 때문입니다.