다음을 통해 공유


CA1862: ‘StringComparison’ 메서드 오버로드를 사용하여 대/소문자를 구분하지 않는 문자열 비교를 수행합니다.

속성
규칙 ID CA1862
제목 'StringComparison' 메서드 오버로드를 사용하여 대/소문자를 구분하지 않는 문자열 비교 수행
범주 성능
수정 사항이 호환성을 깨뜨리는지 여부 또는 무중단인지 여부 주요 변경 아님
.NET 10에서 기본적으로 사용하도록 설정 제안 사항
적용 가능한 언어 C# 및 Visual Basic

원인

코드는 두 문자열 중 하나 또는 두 문자열 모두에 대해 ToLower(), ToLowerInvariant(), ToUpper(), 또는 ToUpperInvariant()을 처음에 호출하여 대/소문자를 구분하지 않는 방식으로 두 문자열을 비교합니다.

규칙 설명

코드가 ToLower(), ToLowerInvariant(), ToUpper(), 또는 ToUpperInvariant()를 호출할 때 할당이 수행됩니다. 이러한 메서드를 호출하는 유일한 이유는 대/소문자를 구분하지 않는 문자열 비교 또는 검색을 수행하는 경우 할당이 필요하지 않습니다. 문자열 비교 메서드를 호출하고 StringComparison에 하나의 *IgnoreCase 값을 지정할 수 있습니다.

위반 문제를 해결하는 방법

ToLower(), ToLowerInvariant(), ToUpper(), 또는 ToUpperInvariant()에 대한 호출을 제거하고, StringComparer 메서드 중 하나를 호출하거나, StringComparison 인수를 받는 다음 메서드 중 하나를 호출하십시오.

주의

  • 인수를 사용하는 오버로드 StringComparison 를 사용하도록 코드를 변경하면 동작이 미묘하게 변경될 수 있습니다. 이 변경을 수행하거나 Visual Studio 전구 제안을 수락하는 경우 철저한 테스트를 수행하는 것이 중요합니다.
  • 문자열을 문화적으로 민감한 방식으로 비교할 필요가 없는 경우 StringComparison.OrdinalIgnoreCase를 전달하도록 고려하십시오.

예시

다음 예제에서는 규칙 위반을 보여줍니다.

string s1 = "aBc";
string s2 = "aBC";

int _ = s1.ToUpper().CompareTo(s2.ToUpper());
Dim s1 As String = "aBc"
Dim s2 As String = "aBC"

Dim i As Integer = s1.ToUpper().CompareTo(s2.ToUpper())

다음 예제에서는 위반을 해결하는 코드를 보여줍니다.

string s1 = "aBc";
string s2 = "aBC";

int _ = StringComparer.CurrentCultureIgnoreCase.Compare(s1, s2);
Dim s1 As String = "aBc"
Dim s2 As String = "aBC"

Dim i As Integer = StringComparer.CurrentCultureIgnoreCase.Compare(s1, s2)

경고를 표시하지 않는 경우

성능이 중요하지 않은 경우 이 규칙의 경고를 표시하지 않는 것이 안전합니다.

EF Core(Entity Framework Core)를 사용하는 경우 문자열을 비교하여 데이터베이스를 쿼리하는 시나리오에 대해 이 규칙을 표시하지 않아야 합니다. EF Core는 StringComparison 인수를 사용하는 메서드인 String.Equals(String, StringComparison) 같은 메서드를 사용할 경우 예외를 throw합니다. 이는 이러한 쿼리를 SQL로 변환하지 않기 때문입니다. 자세한 내용은 기본 제공 .NET 문자열 작업의 번역을 참조 하세요.

경고 표시 안 함

단일 위반을 억제하려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 비활성화한 후 다시 활성화하십시오.

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

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

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

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