views:

2203

answers:

5

When comparing two strings in c# for equality, what is the difference between InvariantCulture and Oridinal comparision.

+1  A: 

Maybe http://blogs.msdn.com/michkap/archive/2004/12/29/344136.aspx ? (googled)

Mongo
Sweet ! Thanks for that link !
Cerebrus
Michael Kaplan is to Text as Jon Skeet is to SO ;)
ShuggyCoUk
+11  A: 

The "InvariantCulture" setting uses a "standard" set of character orderings (a,b,c, ... etc.). This is in contrast to some specific locales, which may sort characters in different orders ('a-with-acute' may be before or after 'a', depending on the locale, and so on).

"Ordinal" comparison, on the other hand, looks purely at the values of the raw byte(s) that represent the character. There's a great sample at http://msdn.microsoft.com/en-us/library/e6883c06.aspx that shows the results of the various StringComparison values. All the way at the end, it shows (excerpted):

StringComparison.InvariantCulture:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is less than LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)

StringComparison.Ordinal:
LATIN SMALL LETTER I (U+0069) is less than LATIN SMALL LETTER DOTLESS I (U+0131)
LATIN SMALL LETTER I (U+0069) is greater than LATIN CAPITAL LETTER I (U+0049)
LATIN SMALL LETTER DOTLESS I (U+0131) is greater than LATIN CAPITAL LETTER I (U+0049)

You can see that where InvariantCulture yields (U+0069, U+0049, U+00131), Ordinal yields (U+0049, U+0069, U+00131).

JaredReisinger
+5  A: 
Rob Parker
A: 

Always try to use InvariantCulture in those string methods that accept it as overload. By using InvariantCulture you are on a safe side. Many .NET programmers may not use this functionality but if your software will be used by different cultures, InvariantCulture is an extremely handy feature.

George
A: 

Invariant is a linguistically appropriate type of comparison.
Ordinal is a binary type of comparison. (faster)
See http://blogs.msdn.com/b/michkap/archive/2004/12/29/344136.aspx

DanH