For minimum ambiguity and maximum readability, always use overloads that explicitly specify StringComparison
and/or CultureInfo
parameters.
StringComparison.Ordinal
Use StringComparison.Ordinal
or StringComparison.OrdinalIgnoreCase
for non-linguistic (“computery”) type strings,
such as protocols or error codes.
var protocol = GetProtocol(uri);
var isHttp = protocol.Equals("http");
var protocol = GetProtocol(uri);
var isHttp = protocol.Equals("http", StringComparison.OrdinalIgnoreCase);
StringComparison.CurrentCulture
Use StringComparison.CurrentCulture
, StringComparison.CurrentCultureIgnoreCase
, or supply a specific CultureInfo
when the string contains natural language. In the following example, the expected sort order of the two strings
may change between cultures.
var result = string.Compare("able", "ångström");
var result = string.Compare("able", "ångström", StringComparison.CurrentCulture);
// or
var result = string.Compare("able", "ångström", new CultureInfo("sv-SE"), CompareOptions.None);
StringComparison.InvariantCulture
Do not use string operations based on
StringComparison.InvariantCulture
in most cases. One of the few exceptions is when you are persisting linguistically meaningful but culturally agnostic data. - Best practices for using strings in .NET