아래의 대소 문자를 구분하지 않으려면 어떻게해야합니까?
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)
- 두 문자열이 같은지 테스트하려면 String.Equals 메서드의 오버로드를 사용하십시오.
- String.Compare 및 String.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
대신 에 사용 하는 것은 어떻습니까?