다음을 통해 공유


CA1305: IFormatProvider를 지정하십시오.

속성
규칙 ID CA1305
제목 IFormatProvider를 지정하세요.
범주 전역화
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 9에서 기본적으로 사용 아니요

원인

인수를 수락 System.IFormatProvider 하는 오버로드가 있고 해당 오버로드가 호출되지 않는 메서드에 대한 호출이 이루어집니다.

이 규칙은 IFormatProvider 매개 변수를 무시하는 것으로 문서화된 .NET 메서드에 대한 호출을 무시합니다. 규칙은 다음과 같은 메서드도 무시합니다.

규칙 설명

개체 System.Globalization.CultureInfo 또는 IFormatProvider 개체가 제공되지 않으면 오버로드된 멤버가 제공하는 기본값이 모든 로캘에서 원하는 효과가 없을 수 있습니다. 또한 .NET 멤버는 코드에 적합하지 않을 수 있다는 가정에 따라 기본 문화권 및 서식을 선택합니다. 코드가 시나리오에서 예상대로 작동하는지 확인하려면 다음 지침에 따라 문화권 관련 정보를 제공해야 합니다.

  • 값이 사용자에게 표시되면 현재 문화권을 사용합니다. CultureInfo.CurrentCulture을 참조하세요.

  • 소프트웨어에서 값을 저장하고 액세스하는 경우(파일이나 데이터베이스에 보관되는 경우) 고정 문화권을 사용합니다. CultureInfo.InvariantCulture을 참조하세요.

  • 값의 대상을 모르는 경우 데이터 소비자 또는 공급자가 문화권을 지정하도록 합니다.

오버로드된 멤버의 기본 동작이 요구 사항에 적합한 경우에도 코드가 자체 문서화되고 보다 쉽게 유지 관리되도록 문화권별 오버로드를 명시적으로 호출하는 것이 좋습니다.

위반 문제를 해결하는 방법

이 규칙의 위반 문제를 해결하려면 IFormatProvider 인수를 사용하는 오버로드를 사용합니다. 또는 고정 문화권을 사용하려면 C# 보간된 문자열 String.Create(IFormatProvider, DefaultInterpolatedStringHandler) 을 사용하여 다음과 같이 CultureInfo.InvariantCulture전달합니다.

string.Create(CultureInfo.InvariantCulture, $"{major}.{minor}.{build}.{revision}");

경고를 표시하지 않는 경우

기본 형식이 올바른 선택이고 코드 유지 관리가 개발 우선 순위에서 중요하지 않은 경우 이 규칙의 경고를 표시하지 않아도 됩니다.

경고 표시 안 함

단일 위반만 표시하지 않으려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 사용하지 않도록 설정한 후 다시 사용하도록 설정합니다.

#pragma warning disable CA1305
// The code that's violating the rule is on this line.
#pragma warning restore CA1305

파일, 폴더 또는 프로젝트에 대한 규칙을 사용하지 않도록 설정하려면 구성 파일에서 심각도를 none으로 설정합니다.

[*.{cs,vb}]
dotnet_diagnostic.CA1305.severity = none

자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.

분석할 코드 구성

다음 옵션을 사용하여 이 규칙이 실행될 코드베이스 부분을 구성합니다.

이 규칙, 적용되는 모든 규칙 또는 적용되는 이 범주(세계화)의 모든 규칙에 대해 이러한 옵션을 구성할 수 있습니다. 자세한 내용은 코드 품질 규칙 구성 옵션을 참조하세요.

특정 기호 제외

분석에서 형식 및 메서드와 같은 특정 기호를 제외할 수 있습니다. 예를 들어 MyType이라는 형식 내 코드에서 규칙을 실행하지 않도록 지정하려면 프로젝트의 .editorconfig 파일에 다음 키-값 쌍을 추가합니다.

dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType

옵션 값의 허용되는 기호 이름 형식(|로 구분):

  • 기호 이름만(포함하는 형식 또는 네임스페이스와 관계없이 해당 이름의 모든 기호 포함).
  • 기호의 설명서 ID 형식에 있는 정규화된 이름. 각 기호 이름에는 메서드의 경우 M:, 형식의 경우 T:, 네임스페이스의 경우 N:과 같은 기호 종류 접두사가 필요합니다.
  • 생성자의 경우 .ctor이고 정적 생성자의 경우 .cctor입니다.

예:

옵션 값 요약
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType MyType이라는 모든 기호와 일치합니다.
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType1|MyType2 MyType1 또는 MyType2라는 모든 기호와 일치합니다.
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS.MyType.MyMethod(ParamType) 특정 메서드 MyMethod를 지정된 정규화된 시그니처와 비교합니다.
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS1.MyType1.MyMethod1(ParamType)|M:NS2.MyType2.MyMethod2(ParamType) 특정 메서드 MyMethod1MyMethod2를 개별 정규화된 시그니처와 비교합니다.

특정 형식 및 해당 파생 형식 제외

분석에서 특정 형식과 해당 파생 형식을 제외할 수 있습니다. 예를 들어 MyType이라는 형식 및 해당 파생 형식 내에 있는 메서드에서 규칙이 실행되지 않도록 지정하려면 프로젝트의 .editorconfig 파일에 다음 키-값 쌍을 추가합니다.

dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType

옵션 값의 허용되는 기호 이름 형식(|로 구분):

  • 형식 이름만(포함하는 형식이나 네임스페이스와 관계없이 해당 이름의 모든 형식 포함)
  • 기호의 설명서 ID 형식에 있는 정규화된 이름(선택적 T: 접두사 포함)

예:

옵션 값 요약
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType MyType이라는 모든 형식 및 모든 해당 파생 형식과 일치합니다.
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType1|MyType2 MyType1 또는 MyType2라는 모든 형식 및 모든 해당 파생 형식과 일치합니다.
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType 지정된 정규화된 이름의 특정 MyType 형식 및 모든 해당 파생 형식과 일치합니다.
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS1.MyType1|M:NS2.MyType2 개별 정규화된 이름의 특정 MyType1, MyType2 형식 및 모든 해당 파생 형식과 일치합니다.

예시

다음 코드에서 example1 문자열은 규칙 CA1305를 위반합니다. example2 문자열은 IFormatProvider를 구현하는 CultureInfo.CurrentCultureString.Format(IFormatProvider, String, Object)에 전달하여 규칙 CA1305를 충족합니다. 문자열은 example3 보간된 문자열을 함께 전달하여 규칙 CA1305를 String.Create(IFormatProvider, DefaultInterpolatedStringHandler) CultureInfo.InvariantCulture충족합니다.

string name = "Georgette";

// Violates CA1305
string example1 = string.Format("Hello {0}", name);

// Satisfies CA1305
string example2 = string.Format(CultureInfo.CurrentCulture, "Hello {0}", name);

// Satisfies CA1305
string example3 = string.Create(CultureInfo.InvariantCulture, $"Hello {name}");

참고 항목