TheDeveloperBlog.com


C# String Compare and CompareTo Methods

Compare, CompareTo. Compare determines the sort order of strings. It checks if one string is ordered before another when in alphabetical order, whether it is ordered after, or is equivalent. Compare, CompareOrdinal and CompareTo provide this functionality.

String Compare method results

String A: First alphabetically
String B: Second alphabetically

Compare(A, B): -1
Compare(B, A):  1

Compare(A, A):  0
Compare(B, B):  0


Example. We use the Compare instance methods and related methods on the string type. Normally we need the Compare methods for sorting algorithms and testing whether one string comes before or after the other in a plain ASCII sort.

C# program that uses Compare

using System;

class Program
{
    static void Main()
    {
	string a = "a"; // 1
	string b = "b"; // 2

	int c = string.Compare(a, b);
	Console.WriteLine(c);

	c = string.CompareOrdinal(b, a);
	Console.WriteLine(c);

	c = a.CompareTo(b);
	Console.WriteLine(c);

	c = b.CompareTo(a);
	Console.WriteLine(c);
    }
}

Output

-1       (This means a is smaller than b)
1        (This means b is smaller than a)
-1
1

The program shows three comparison methods on the string type. The Compare and CompareOrdinal methods are static on the String type, while the CompareTo method is an instance method on the variable itself.

Note: If the first string is bigger, the result is 1. If the first string is smaller, the result is -1.

CompareTo

And: If both strings are equal, the result is 0. The number essentially indicates how much "larger" the first string is.

Also, these methods can be customized to use any globalization context. By default, string.Compare and CompareTo use the system globalization for safe comparisons. Cultures such as Turkish have common letters that need globalization.

Tip: You can specify those cultures in the method call as a parameter to accomplish this goal.


Discussion. All sorting algorithms must see if one string should be ordered before any other string. The Compare methods are ideal for when you need to implement your own sorting methods. They are not needed to check string equality.

Instead: You can use the Equals method, or the == operator, for simpler code in that case.

String Equals

Case. String comparisons in the .NET Framework are by default case-sensitive ("A" is considered different from "a"). However, you can use the StringComparison.OrdinalIgnoreCase enumerated constant to use a case-insensitive comparison.

Tip: This option is useful in many programs, such as those that deal with the Windows file system where file case is not important.


Summary. The Compare methods see if one string is larger, smaller or equal to another. Compare returns 1 if the first string is alphabetically first, 0 if the two strings are equal, and -1 if the first string is alphabetically second.

Finally: We noted where the Compare methods are best used. We can modify their behavior with a StringComparison enum.

StringComparison