Yes! There really are 6 ways to compare strings within .NET (I suspect other languages as well). Hopefully this will shed some light on the options.
- December 10, 2019
In .NET there are 6 ways to compare strings. Really? Why is it so difficult?
Performs a simple byte comparison that is independent of language. This is most appropriate when comparing strings that are generated programmatically or when comparing case-sensitive resources such as passwords.
Treats the characters in the strings to compare as if they were converted to uppercase using the conventions of the invariant culture, and then performs a simple byte comparison that is independent of language. This is most appropriate when comparing strings that are generated programmatically or when comparing case-insensitive resources such as paths and filenames.
Compares strings in a linguistically relevant manner, but it is not suitable for display in any particular culture. Its major application is to order strings in a way that will be identical across cultures.
Compares strings in a linguistically relevant manner that ignores case, but it is not suitable for display in any particular culture. Its major application is to order strings in a way that will be identical across cultures.
Can be used when strings are linguistically relevant. For example, if strings are displayed to the user, or if strings are the result of user interaction, culture-sensitive string comparison should be used to order the string data.
Can be used when strings are linguistically relevant but their case is not. For example, if strings are displayed to the user but case is unimportant, culture-sensitive, case-insensitive string comparison should be used to order the string data.
Tip: You should always specify explicitly the comparer as the default value is not consistent.
For instance,
string.IndexOf
uses the current culture whereas string.Equals
uses Ordinal.
i.e.
string.Equals("", "", StringComparison.Ordinal);
new [] { "" }.Contains("", StringComparer.Ordinal);
new Dictionary(StringComparer.Ordinal);
Refer to blog for additional samples and Rosyln analyzer to help with coding within your IDE.