Suppose I have a .net Array of strings.
string[] strings = new string[] { \"AbC\", \"123\", \"Xyz\", \"321\" };
If I wanted to see if the a
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));
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.
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.