一个比较奇怪的问题,我的代码如下:
static void Main(string[] args)
{
Console.WriteLine(string.Compare("-", "a"));//output -1
Console.WriteLine(string.Compare("-d", "a"));//output 1
Console.Read();
}
请高手指点为什么会这样?
我在MSDN看到一些信息,主要是说与特定区域性设置有关,连字符"-"占的比重很小,但讲的不是太清楚:http://msdn.microsoft.com/en-US/library/system.globalization.compareoptions%28v=vs.80%29.aspx
所有string的比较方法都跟当前的CultureInfo相关的,具体的非常细节的规则我也不是很清楚,我把我知道的举个例子。假设我们有这么些字符用来排序(互相比较): a -a .a b -b
第一步:找准大方向。这一步里一些看起来是连接字符的(比如 "-" ".")被忽略了,因此上面的几个其实是a和b的排序
第二步:忽略连接字符后按照byte值比较,相当于你传了StringComparison.Ordinal的效果。因此-a .a(本质是a系列)都会排在b系列的前面(因为a在b前面)
第三步:系列内部比较。a -a .a 都是a系列, b -b都是b系列,他们内部也有比较规则。这里的规则我就不太清楚了。
嗯,这里MSDN也没有说清楚