Ответы:
array.Contains("str", StringComparer.OrdinalIgnoreCase);
Или, в зависимости от конкретных обстоятельств, вы можете предпочесть:
array.Contains("str", StringComparer.CurrentCultureIgnoreCase);
array.Contains("str", StringComparer.InvariantCultureIgnoreCase);
InvariantCulture. Использование любого из трех вариантов выбора выше зависит от обстоятельств. Я не возражаю против вашего изменения порядка, но я удаляю комментарий «вероятно, нет». В ответе уже ясно, что вы должны выбрать тот, который подходит вам в текущей ситуации.
Несколько важных замечаний с моей стороны, или, по крайней мере, размещение некоторой распределенной информации в одном месте - относительно приведенного выше совета с помощью StringComparer, например:
if (array.Contains("str", StringComparer.OrdinalIgnoreCase))
{}
array.Contains() является методом расширения LINQ и поэтому работает по стандарту только с .NET 3.5 или выше, для чего требуется:
using System;
using System.Linq;
Но: в .NET 2.0 простой Contains()метод (без учета нечувствительности к регистру) по крайней мере возможен, например, с приведением:
if ( ((IList<string>)mydotNet2Array).Contains(“str”) )
{}
Поскольку метод Contains () является частью интерфейса IList, он работает не только с массивами, но также со списками и т. Д.
Реализуйте пользовательский IEqualityComparer, который учитывает регистронезависимость.
Кроме того, проверьте это . Так что (в теории) все, что вам нужно сделать, это:
myArray.Contains("abc", ProjectionEqualityComparer<string>.Create(a => a.ToLower()))
new[] { "ABC" }.Select(e => e.ToLower()).Contains("abc") // returns true
CurrentCulture), вы должны использоватьOrdinalвместоInvariantCulture.