.NET: How to determine if a string comes before another string based on the dictionary order

 Language: C#

Usually string comparisons are needed just to determine the equality (or inequality) of 2 strings.  However, there are times when determining inequality isn't the end in itself.  Sometimes a developer also needs to know if a particular string should "come before" another string --  alphabetically , based on the common dictionary order.

The regular relational operators ( <, >, =<. >=) do not work on string variables and/or literals. So using:

    if (string1 < string2)
       //    code here

is out of the question because the compiler will not even allow it.  So what's the alternative?  As it turns out, the same function that I mentioned for performing case-insensitive string operations (string.Compare), is also capable of determining if the first string parameter alphabetically comes before the second string parameter.  The function returns zero (== 0) if the strings are equal, a negative value (< 0) if the first string is "less than" (alphabetically comes before) the second string, and a positive value (> 0) if the first string is "greater than" (alphabetically comes after) the second string.  Given this, the following code will return a negative value:

    string.Compare("B21", "B22");

whereas this will return a positive value:

    string.Compare("B22", "B21");

Now, if the strings are not of equal length, the longer string is always considered "greater" than the shorter string.  So the following code will return a negative value:

    string.Compare("B2", "B21");

And, of course, you can perform case-insensitive comparisons, e.g.

    string.Compare("b22", "B21", false);

As always, please refer to the MSDN documentation for additional information. Link

Published 05-30-2007 3:35 PM by raistlin
Filed under: , ,