我正在尝试比较字符串值:
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");
}
}
lesser
equal
出于某种原因,greater
案例无法打印。为什么"N-1.2.0.10"
被认为不是"N-1.2.0.8"
?
答案 0 :(得分:3)
为什么会这样?字符串比较是逐个字符进行的(有一些可能的异常,这里不适用),'1'
比较小于'8'
。
您正在寻找的排序类型("10"
比较大于"8"
)通常称为“自然排序”,.NET Framework不直接提供任何选项,但这很容易创建(or let the native WinAPI do the work)。
答案 1 :(得分:2)
之所以发生这种情况,是因为字符串按字母顺序排序,而不是数字排序:
10
11
12
20
8
etc.