C# 대소문자를 구분하지 않는 동등 연산자가 있습니까?
다음은 대소문자를 구분하는 항목입니다.
if (StringA == StringB) {
그렇다면 두 문자열을 무감각하게 비교할 연산자가 있을까요?
사용해 보십시오.
string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase);
문자의 대소문자를 무시하고 두 문자열을 비교하는 가장 좋은 방법은 문자열을 사용하는 것입니다.순서 무시 대소문자열 비교를 지정하는 정적 메서드와 같습니다.이것은 또한 가장 빠른 방법으로, 문자열을 소문자 또는 대문자로 변환하고 그 이후에 비교하는 것보다 훨씬 빠릅니다.
저는 두 가지 접근 방식의 성능을 테스트했고 순서 무시 대소문자열 비교가 9배 이상 빨랐습니다!또한 문자열을 소문자 또는 대문자로 변환하는 것보다 더 신뢰할 수 있습니다(터키어 i 문제 확인).따라서 항상 문자열을 사용합니다.동일한 문자열을 비교하는 동일한 방법:
String.Equals(string1, string2, StringComparison.OrdinalIgnoreCase);
배양 관련 문자열 비교를 수행하려면 다음 코드를 사용할 수 있습니다.
String.Equals(string1, string2, StringComparison.CurrentCultureIgnoreCase);
두 번째 예제는 현재 문화의 문자열 비교 논리를 사용하므로 첫 번째 예제의 "순서 무시 사례" 비교보다 느리기 때문에 문화별 문자열 비교 논리가 필요하지 않고 최대 성능을 추구하는 경우에는 "순서 무시 사례" 비교를 사용합니다.
더 많은 정보를 원하시면, 제 블로그의 전체 이야기를 읽으세요.
여러 가지 속성이 있습니다.StringComparer
원하는 모든 유형의 대/소문자 구분에 대해 비교를 반환하는 정적 클래스:
예를 들어, 당신은 전화할 수 있습니다.
StringComparer.CurrentCultureIgnoreCase.Equals(string1, string2)
또는
StringComparer.CurrentCultureIgnoreCase.Compare(string1, string2)
그것은 그것보다 조금 더 깨끗합니다.string.Equals
또는string.Compare
인수가 필요한 오버로드입니다.
System.Collections.CaseInsensitiveComparer
또는
System.StringComparer.OrdinalIgnoreCase
string.Equals(StringA, StringB, StringComparison.CurrentCultureIgnoreCase);
또는
if (StringA.Equals(StringB, StringComparison.CurrentCultureIgnoreCase)) {
그러나 문자열 A가 null이 아닌지 확인해야 합니다.그래서 아마도 더 잘 사용할 수 있을 것입니다.
string.Equals(StringA , StringB, StringComparison.CurrentCultureIgnoreCase);
존의 제안대로
편집: 버그 수정
사용할 수 있습니다.
if (stringA.equals(StringB, StringComparison.CurrentCultureIgnoreCase))
교환원?아니요, 하지만 문자열 비교가 대소문자를 구분하지 않도록 문화를 변경할 수 있다고 생각합니다.
// you'll want to change this...
System.Threading.Thread.CurrentThread.CurrentCulture
// and you'll want to custimize this
System.Globalization.CultureInfo.CompareInfo
저는 동등한 연산자가 문자열을 비교하는 방식을 바꿀 것이라고 확신합니다.
여기 구문을 단순화하는 아이디어가 있습니다.
public class IgnoreCase
{
private readonly string _value;
public IgnoreCase(string s)
{
_value = s;
}
protected bool Equals(IgnoreCase other)
{
return this == other;
}
public override bool Equals(object obj)
{
return obj != null &&
(ReferenceEquals(this, obj) || (obj.GetType() == GetType() && this == (IgnoreCase) obj));
}
public override int GetHashCode()
{
return _value?.GetHashCode() ?? 0;
}
public static bool operator ==(IgnoreCase a, IgnoreCase b)
{
return string.Equals(a, b, StringComparison.OrdinalIgnoreCase);
}
public static bool operator !=(IgnoreCase a, IgnoreCase b)
{
return !(a == b);
}
public static implicit operator string(IgnoreCase s)
{
return s._value;
}
public static implicit operator IgnoreCase(string s)
{
return new IgnoreCase(s);
}
}
다음과 같이 사용 가능:
Console.WriteLine((IgnoreCase) "a" == "b"); // false
Console.WriteLine((IgnoreCase) "abc" == "abC"); // true
Console.WriteLine((IgnoreCase) "Abc" == "aBc"); // true
Console.WriteLine((IgnoreCase) "ABC" == "ABC"); // true
나는 이러한 비교 방법의 끝에 있는 타이핑에 매우 익숙합니다., StringComparison.
그래서 연장을 했습니다.
namespace System
{ public static class StringExtension
{
public static bool Equals(this string thisString, string compareString,
StringComparison stringComparison)
{
return string.Equals(thisString, compareString, stringComparison);
}
}
}
다음 날짜에 Null을 확인해야 합니다.thisString
다음 전화를 걸기 전에.
string.Compare(string1, string2, true)
다른 답변은 여기서 완전히 유효하지만, 어떻게든 입력하는 데 시간이 걸립니다.StringComparison.OrdinalIgnoreCase
그리고 또한 사용합니다.String.Compare
.
비교가 대소문자를 구분하는지 아니면 불리언과 대소문자를 구분하지 않는지 지정할 수 있는 간단한 문자열 확장 방법을 코딩했습니다. 다음 답변을 참조하십시오.
https://stackoverflow.com/a/49208128/2338477
if (StringA.ToUpperInvariant() == StringB.ToUpperInvariant()) {
사람들이 상위 불변량()이 하위 변동량보다 빠르다고 보고함불변().
언급URL : https://stackoverflow.com/questions/631233/is-there-a-c-sharp-case-insensitive-equals-operator
'programing' 카테고리의 다른 글
MongoDB에서 이 스키마를 어떻게 구현해야 합니까? (0) | 2023.07.30 |
---|---|
속성 x가 없는 요소와 일치하는 css 선택기 (0) | 2023.07.30 |
웹 페이지의 일련 번호를 기준으로 SQL을 데이터로 채우는 Python (0) | 2023.07.30 |
SQL의 하위 쿼리에 대한 TAB를 언제 추가해야 합니까? (0) | 2023.07.30 |
부트스트랩의 "col-md-4", "col-xs-1", "col-lg-2"에 있는 숫자의 의미 (0) | 2023.07.30 |