Array.Contains를 문자열 배열에서 대소 문자를 구분하지 않게하려면 어떻게해야합니까?


172

Array.Contains문자열 배열 에서 메소드를 사용하고 있습니다. 대소 문자를 구분하지 않으려면 어떻게해야합니까?

답변:


307
array.Contains("str", StringComparer.OrdinalIgnoreCase);

또는 특정 상황에 따라 다음을 선호 할 수 있습니다.

array.Contains("str", StringComparer.CurrentCultureIgnoreCase);
array.Contains("str", StringComparer.InvariantCultureIgnoreCase);

4
msdn.microsoft.com/ko-kr/library/dd465121.aspx 에 따르면 , "불변 배양에는 비교에 유용한 속성이 거의 없습니다." 문화권 별 비교를 원하지 않는 거의 모든 경우 ( CurrentCulture) Ordinal보다는 을 사용해야합니다 InvariantCulture.
— bdukes

2
@bdukes 너무 강력하다. 유효한 이유가 있습니다 InvariantCulture. 위의 세 가지 선택 중 하나를 사용하는 것은 상황에 따라 다릅니다. 나는 당신의 재정렬에 반대하지는 않지만 "아마도"주석을 제거하고 있습니다. 현재 상황에서 자신에게 맞는 것을 선택해야한다는 대답이 이미 명확합니다.
— Mehrdad Afshari

1
Contains가 System.Linq의 확장 방법이라는 것을 깨달았습니다.
— Craig Celeste

LINQ는 다시 하루를 저장합니다.
— Bryantee

@MehrdadAfshari이 경우 이전 주석은 완벽하게 유효합니다. "포함"은 평등을 확인하기 만하면되며, 이는 서수 비교와 함께보다 효율적입니다. 다른 "Culture"인식 비교는 문자 순서와 관련이 있으므로 정렬에만 관련됩니다.
— user1751825

9

내 쪽의 중요한 메모 또는 적어도 한 곳에서 분산 정보를 배치합니다. 위의 팁과 관련하여 다음과 같이 StringComparer를 사용합니다.

if (array.Contains("str", StringComparer.OrdinalIgnoreCase))
{}
  1. array.Contains() LINQ 확장 방법이므로 .NET 3.5 이상에서만 표준으로 작동합니다.
    using System;
    using System.Linq;

  2. 그러나 .NET 2.0에서는 Contains()캐스트를 사용하여 대소 문자를 구분하지 않고 간단한 방법을 사용할 수 있습니다.

    if ( ((IList<string>)mydotNet2Array).Contains(“str”) ) {}

    Contains () 메서드는 IList 인터페이스의 일부이므로 배열뿐만 아니라 목록 등에서도 작동합니다.


1

맞춤형 IEqualityComparer 구현대소 문자를 구분하지 않는 를 .

또한 이것을 확인 하십시오 . 따라서 (이론적으로) 당신이해야 할 일은 다음과 같습니다.

myArray.Contains("abc", ProjectionEqualityComparer<string>.Create(a => a.ToLower()))

18
5 분 전까지 StringComparer가 존재하는지 몰랐기 때문입니다. :)
— Kon

0
new[] { "ABC" }.Select(e => e.ToLower()).Contains("abc") // returns true

4
그러나 이것이 목록의 각 항목에 대해 비싼 ToLower () 호출을 수행하지 않습니까? String.이 예제에서는 StringComparison 오버로드와 동일합니다.
— Mike Cole
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.