Let's say I have two strings: a and b. To compare whether a and be have the same values when case is ignored, I've always used:
// (Assume a and b have been verified not to be null)
if (a.ToLower() == b.ToLower())
However, using Reflector, I've seen this a few times in the .NET Framework:
// (arg three is ignoreCase)
if (string.Compare(a, b, true) == 0)
I tested which is faster, and the ToLower()
beat Compare()
every time with the strings I used.
Is there a reason why to Compare()
instead of ToLower()
? Something about different CultureInfo
? I'm scratching my head.
The main thing you should be concerned about isn't performance, it's correctness, and from that aspect the method you probably want to be using for a case insensitive comparison is either:
string.Compare(a, b, StringComparison.OrdinalIgnoreCase) == 0;
or
a.Equals(b, StringComparison.OrdinalIgnoreCase)
(The first one is useful if you know the strings may be null; the latter is simpler to write if you already know that at least one string is non-null. I've never tested the performance but assume it will be similar.)
Ordinal
or OrdinalIgnoreCase
are a safe bet unless you know you want to use another comparison method; to get the information needed to make the decision read this article on MSDN.