Подтвердить что ты не робот

Как сделать IEnumerable <string>.Contains без учета регистра?

Предположим, что у меня есть .net Массив строк.

string[] strings = new string[] { "AbC", "123", "Xyz", "321" };

Если бы я хотел посмотреть, содержит ли массив строк "ABC", я мог бы написать

strings.Contains("ABC");

Однако предположим, что мне нужна функция, которая вернет true, если в верхнем регистре строк строки "ABC". Я мог бы загладить весь массив, но похоже, что метод .Contains имеет некоторые перегрузки для указания сравнения, но я смущен синтаксисом.

Как я могу использовать метод IEnumerable<string>.Contains() реализовать эту логику?

4b9b3361

Ответ 1

Использовать перегруженный метод Enumerable.Contains, который принимает равенство:

strings.Contains("ABC", StringComparer.InvariantCultureIgnoreCase)

Также есть сопоставитель строк в поле, которое вы можете использовать.

Ответ 2

Мне лично нравится этот парень LambdaComparer, который действительно полезен для таких вещей:

LINQ Ваши коллекции с IEqualityComparer и выражениями лямбда

Пример использования:

var comparer = new LambdaComparer<string>(
    (lhs, rhs) => lhs.Equals(rhs, StringComparison.InvariantCultureIgnoreCase));

var seq = new[]{"a","b","c","d","e"};

Debug.Assert(seq.Contains("A", comparer));