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