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

192
Mike Cole 4 Июн 2009 в 23:40

4 ответа

Лучший ответ
array.Contains("str", StringComparer.OrdinalIgnoreCase);

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

array.Contains("str", StringComparer.CurrentCultureIgnoreCase);
array.Contains("str", StringComparer.InvariantCultureIgnoreCase);
336
mmx 25 Июл 2011 в 21:09
new[] { "ABC" }.Select(e => e.ToLower()).Contains("abc") // returns true
0
Darin Dimitrov 4 Июн 2009 в 19:44

Реализуйте настраиваемый IEqualityComparer, учитывающий регистр в учетная запись.

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

myArray.Contains("abc", ProjectionEqualityComparer<string>.Create(a => a.ToLower()))
1
Community 23 Май 2017 в 11:33

Некоторые важные примечания с моей стороны или, по крайней мере, размещение некоторой распределенной информации в одном месте - относительно приведенного выше совета с помощью 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 ) mydotNet2Array) .Contains («str»)) {}

    Поскольку метод Contains () является частью интерфейса IList, он работает не только с массивами, но и со списками и т. Д.

9
Philm 5 Ноя 2018 в 13:24