다음을 통해 공유


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

속성
규칙 ID CA1862
제목 'StringComparison' 메서드 오버로드를 사용하여 대/소문자를 구분하지 않는 문자열 비교 수행
범주 성능
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 9에서 기본적으로 사용 제안 사항

원인

코드는 첫 번째 호출ToLower()ToLowerInvariant()ToUpper(), 또는 하나 또는 ToUpperInvariant() 두 문자열에서 대/소문자를 구분하지 않는 방식으로 두 문자열을 비교합니다.

규칙 설명

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

위반 문제를 해결하는 방법

ToUpper()ToLowerInvariant()대한 ToLower()호출을 제거하고 메서드 중 하나 또는 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는 이러한 쿼리를 SQL로 String.Equals(String, StringComparison) 변환하지 않으므로 인수를 사용하는 StringComparison 메서드를 사용하는 경우 예외를 throw합니다. 자세한 내용은 기본 제공 .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

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