[C#] 대소 문자를 구분하지 않는 문자열 비교를 어떻게 할 수 있습니까?

아래의 대소 문자를 구분하지 않으려면 어떻게해야합니까?

drUser["Enrolled"] = 
      (enrolledUsers.FindIndex(x => x.Username == (string)drUser["Username"]) != -1);

나는 오늘 사용하기를 제안하는 몇 가지 조언을 받았다.

x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase)));

문제는이 작업을 수행 할 수 없다는 것입니다. 아래 줄을 시도했지만이 컴파일하지만 잘못된 결과를 반환합니다. 등록 된 사용자를 등록 된 사용자와 등록되지 않은 사용자로 반환합니다.

drUser["Enrolled"] = 
      (enrolledUsers.FindIndex(x => x.Username.Equals((string)drUser["Username"], 
                                 StringComparison.OrdinalIgnoreCase)));

누구든지 문제를 지적 할 수 있습니까?



답변

이것은 .NET 프레임 워크 (4 & +)에서 평등을 확인하는 가장 좋은 방법은 아닙니다.

String.Compare(x.Username, (string)drUser["Username"], 
                  StringComparison.OrdinalIgnoreCase) == 0

대신 다음을 사용하십시오

String.Equals(x.Username, (string)drUser["Username"], 
                   StringComparison.OrdinalIgnoreCase) 

MSDN은 다음을 권장합니다.

  • 두 문자열이 같은지 테스트하려면 String.Equals 메서드의 오버로드를 사용하십시오.
  • String.CompareString.CompareTo 메소드를 사용하여 문자열이 같지 않고 문자열을 정렬 하십시오 .

답변

String.Compare다음과 같은 정적 기능을 사용해야합니다

x => String.Compare (x.Username, (string)drUser["Username"],
                     StringComparison.OrdinalIgnoreCase) == 0


답변

비교를 위해 이것을 사용하십시오 :

string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase);


답변

다른 답변은 여기에서 완전히 유효하지만 어떻게 든 입력 StringComparison.OrdinalIgnoreCase하고 사용 하는 데 시간이 걸립니다 String.Compare.

간단한 문자열 확장 방법을 코딩했습니다. 여기서 비교가 대소 문자를 구분하는지 부울을 사용하여 대소 문자를 구분하지 않는지 지정할 수 있습니다. 여기에서 전체 코드 스 니펫을 첨부하십시오.

using System;

/// <summary>
/// String helpers.
/// </summary>
public static class StringExtensions
{
    /// <summary>
    /// Compares two strings, set ignoreCase to true to ignore case comparison ('A' == 'a')
    /// </summary>
    public static bool CompareTo(this string strA, string strB, bool ignoreCase)
    {
        return String.Compare(strA, strB, ignoreCase) == 0;
    }
}

그 후 전체 비교는 대략 10 자로 줄어 듭니다.

문자열 확장을 사용하기 전에 :

String.Compare(testFilename, testToStart,true) != 0

문자열 확장을 사용한 후 :

testFilename.CompareTo(testToStart, true)


답변

System.String대소 문자를 구분하지 않는 비교 확장 방법을 제공하기 위해 확장 할 수 있습니다 (논쟁이지만) .

public static bool CIEquals(this String a, String b) {
    return a.Equals(b, StringComparison.CurrentCultureIgnoreCase);
}

다음과 같이 사용하십시오.

x.Username.CIEquals((string)drUser["Username"]);

C #을 사용하면 프로젝트에서 구문 설탕으로 사용할 수있는 확장 메서드를 만들 수 있습니다.

답이 아니며이 질문이 오래되어 해결되었음을 알고 있습니다.이 비트를 추가하고 싶었습니다.


답변

이 링크에서 더 많은 정보를 찾을 수 있다고 생각합니다.

http://codeidol.com/community/dotnet/controlling-case-sensitivity-when-comparing-two-st/8873/

String 클래스에서 Compare 정적 메소드를 사용하여 두 문자열을 비교하십시오. 비교가 대소 문자를 구분하는지 여부는 과부하 중 하나의 세 번째 매개 변수에 의해 결정됩니다. 예를 들면 다음과 같습니다.

string lowerCase = "abc";
string upperCase = "AbC";
int caseInsensitiveResult = string.Compare(lowerCase, upperCase,
  StringComparison.CurrentCultureIgnoreCase);
int caseSensitiveResult = string.Compare(lowerCase,
  StringComparison.CurrentCulture);

caseSensitiveResult 값은 -1 (lowCase가 upperCase보다 작음을 나타냄)이고 caseInsensitiveResult가 0입니다 (lowCase가 upperCase와 같음을 나타냄).


답변

StringComparison.CurrentCultureIgnoreCase대신 에 사용 하는 것은 어떻습니까?