How to make IEnumerable<string>.Contains case-insensitive? How to make IEnumerable<string>.Contains case-insensitive? arrays arrays

How to make IEnumerable<string>.Contains case-insensitive?


Use overloaded Enumerable.Contains method which accepts equality comparer:

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

Also there is strings comparer in box which you can use.


I personally like this guy's LambdaComparer, which is really useful for stuff like this:

LINQ Your Collections with IEqualityComparer and Lambda Expressions

Example Usage:

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));


If for some reason you either prefer or are forced to use StringComparison and not StringComparer, you can add an extension method as follows:

public static bool Contains(this IEnumerable<string> items, string value, StringComparison stringComparison){    StringComparer stringComparer;    switch (stringComparison)    {        case StringComparison.CurrentCulture:            stringComparer = StringComparer.CurrentCulture;            break;        case StringComparison.CurrentCultureIgnoreCase:            stringComparer = StringComparer.CurrentCultureIgnoreCase;            break;        case StringComparison.InvariantCulture:            stringComparer = StringComparer.InvariantCulture;            break;        case StringComparison.InvariantCultureIgnoreCase:            stringComparer = StringComparer.InvariantCultureIgnoreCase;            break;        case StringComparison.Ordinal:            stringComparer = StringComparer.Ordinal;            break;        case StringComparison.OrdinalIgnoreCase:            stringComparer = StringComparer.OrdinalIgnoreCase;            break;        default:            throw new NotImplementedException();    }    return items.Contains(value, stringComparer);}

More variations on how to map these can be found in this question.