String.Compare不适用于更大的案例

时间:2014-11-11 17:58:34

标签: c#

我正在尝试比较字符串值:

using System;

public class Test
{
    public static void Main()
    {
        int cmpValue = String.Compare("N-1.2.0.10", "N-1.2.0.8", StringComparison.InvariantCultureIgnoreCase);
        if(cmpValue > 0)
            Console.WriteLine("greater");

        cmpValue = String.Compare("N-1.2.0.10", "N-1.2.1.10", StringComparison.InvariantCultureIgnoreCase);
        if(cmpValue < 0)
            Console.WriteLine("lesser");

        cmpValue = String.Compare("N-1.2.0.10", "N-1.2.0.10", StringComparison.InvariantCultureIgnoreCase);
        if(cmpValue == 0)
            Console.WriteLine("equal");
    }
}

This prints:

lesser
equal

出于某种原因,greater案例无法打印。为什么"N-1.2.0.10"被认为不是"N-1.2.0.8"

2 个答案:

答案 0 :(得分:3)

为什么会这样?字符串比较是逐个字符进行的(有一些可能的异常,这里不适用),'1'比较小于'8'

您正在寻找的排序类型("10"比较大于"8")通常称为“自然排序”,.NET Framework不直接提供任何选项,但这很容易创建(or let the native WinAPI do the work)。

答案 1 :(得分:2)

之所以发生这种情况,是因为字符串按字母顺序排序,而不是数字排序:

10
11
12
20
8
etc.