If I have some code like this:
If key.Equals("search", StringComparison.OrdinalIgnoreCase) Then ' .. do something ..
And I don't care about the case, should I use OrdinalIgnoreCase, InvariantCultureIgnoreCase, or CurrentCultureIgnoreCase?
If I have some code like this:
If key.Equals("search", StringComparison.OrdinalIgnoreCase) Then ' .. do something ..
And I don't care about the case, should I use OrdinalIgnoreCase, InvariantCultureIgnoreCase, or CurrentCultureIgnoreCase?
It depends on what you want, though I'd shy away from invariantculture unless you're very sure you'll never want to localize the code for other languages. Use CurrentCulture instead.
Also, OrdinalIgnoreCase should respect numbers, which may or may not be what you want.
MSDN makes some pretty clear recommendations about this: http://msdn.microsoft.com/en-us/library/ms973919.aspx
From MSDN's "New Recommendations for Using Strings in Microsoft .NET 2.0"
Summary: Code owners previously using the InvariantCulture for string comparison, casing, and sorting should strongly consider using a new set of String overloads in Microsoft .NET 2.0. Specifically, data that is designed to be culture-agnostic and linguistically irrelevant should begin specifying overloads using either the StringComparison.Ordinal or StringComparison.OrdinalIgnoreCase members of the new StringComparison enumeration. These enforce a byte-by-byte comparison similar to strcmp that not only avoids bugs from linguistic interpretation of essentially symbolic strings, but provides better performance. (15 printed pages)
I guess it depends on your situation. Since ordinal comparisons are actually looking at the characters' numeric Unicode values, they won't be the best choice when you're sorting alphabetically. For string comparisons, though, ordinal would be a tad faster.
I reopen this thread because the framework 4 did some change.
OrdinalIgnoreCase are really slow on framework 4 but increase speed in invariantculture.
Does anyone have noticed this change?