奇怪的行为默认字符串与下划线比较

时间:2017-12-08 12:55:32

标签: c# stringcomparer

通常如果字符A小于字符B,那么我希望在字符串比较中:

AB < BA

事实上,在字典中你可以在BA字之前找到AB字。

不知何故,这不是下划线的情况

小程序;使用复制粘贴检查

public static void Main()
{
    IComparer<string> comp = Comparer<string>.Default;
    Console.WriteLine("Compare '-' with '_': " + comp.Compare("-", "_").ToString());
    Console.WriteLine("Compare '--' with '-_': " + comp.Compare("--", "-_").ToString());
    Console.WriteLine("Compare '-_' with '_-': " + comp.Compare("-_", "_-").ToString());
}

输出结果为:

Compare '-' with '_': -1
Compare '--' with '-_': -1
Compare '-_' with '_-': 1

最后一个值返回+1
所以:

"-"< "_"              // minus is less than underscore
"-_" > "_-"           // minus underscore MORE THAN underscore minus

使用默认字符串比较器时会出现此问题。 StringComparer.Ordinal按预期工作。

这是默认字符串比较器中的错误吗?

0 个答案:

没有答案