Using the StringComparer class for string equality with C# .NET
March 28, 2017 Leave a comment
In this post we saw how to use the generic IEqualityComparer of T interface to indicate equality for our custom types. If you need a similar comparer for strings then there’s a ready-made static class called StringComparer which can construct string comparers for you.
The StringComparer class provides comparers for the common string comparison scenarios: ordinal, locale specific and invariant culture comparisons. This is a good MSDN article on the differences between these.
Let’s first build a string list:
List<string> strings = new List<string>(); strings.Add("hello"); strings.Add("HELLO"); strings.Add("hELLO"); strings.Add("bye"); strings.Add("hello"); strings.Add("bye"); strings.Add("BYE"); strings.Add("byE"); strings.Add("HELLO"); strings.Add("BYE");
If you’d like to get the unique elements with casing taken into account you can write something like this:
List<string> uniqueStrings = strings.Distinct(StringComparer.InvariantCulture).ToList();
uniqueStrings will contain 6 elements.
However, if you’d like to perform a case-insensitive filtering then it’s equally easy:
List<string> uniqueStrings = strings.Distinct(StringComparer.InvariantCultureIgnoreCase).ToList();
uniqueStrings will now only contain 2 elements.
View all various C# language feature related posts here.