Как я могу сделать Array.Contains без учета регистра для строкового массива? - PullRequest
157 голосов
/ 04 июня 2009

Я использую метод Array.Contains для массива строк. Как я могу сделать это без учета регистра?

Ответы [ 4 ]

282 голосов
/ 04 июня 2009
array.Contains("str", StringComparer.OrdinalIgnoreCase);

Или, в зависимости от конкретных обстоятельств, вы можете предпочесть:

array.Contains("str", StringComparer.CurrentCultureIgnoreCase);
array.Contains("str", StringComparer.InvariantCultureIgnoreCase);
7 голосов
/ 20 июня 2012

Некоторые важные заметки с моей стороны, или, по крайней мере, размещение какой-то распределенной информации в одном месте - относительно подсказки выше с помощью 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, он работает не только с массивами, но также со списками и т. Д.

2 голосов
/ 04 июня 2009

Реализация пользовательского IEqualityComparer , который учитывает нечувствительность к регистру.

Дополнительно, проверьте это . Тогда (теоретически) все, что вам нужно сделать, это:

myArray.Contains("abc", ProjectionEqualityComparer<string>.Create(a => a.ToLower()))
0 голосов
/ 04 июня 2009
new[] { "ABC" }.Select(e => e.ToLower()).Contains("abc") // returns true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...