C# 字符串部分比较

C# 字符串部分比较,c#,.net,string,comparison,C#,.net,String,Comparison,可能重复: 我有以下代码 var s1 = "ABzzzzz2"; var s2 = "äbzzzzz1"; var cmp = StringComparison.InvariantCultureIgnoreCase; Console.WriteLine(string.Compare(s1, 0, s2, 0, 7, cmp)); //prints -1 Console.WriteLine(string.Compare(s1, 0, s2, 0, 8, cmp)); //prints 1

可能重复:

我有以下代码

var s1 = "ABzzzzz2";
var s2 = "äbzzzzz1";

var cmp = StringComparison.InvariantCultureIgnoreCase;

Console.WriteLine(string.Compare(s1, 0, s2, 0, 7, cmp)); //prints -1
Console.WriteLine(string.Compare(s1, 0, s2, 0, 8, cmp)); //prints 1
为什么第一个字符串的一部分小于第二个字符串的一部分,而整个第一个字符串大于整个第二个字符串?

我已经在x64、.NET2.0、3.5、4.0上对它进行了测试。我的理论是,该算法首先规范化字符串,然后进行比较。根据这一点,“äbzzz1”标准化为“abzzz1”。规范化形式的第一次比较结果相等,但返回0将不一致,因为实际字符串不相等。因此,它恢复为顺序比较,结果为-1

在第二种情况下,归一化后,很明显“abzzz2”大于“abzzz1”,因此结果为1

这种方法也解释了本节中提到的案例
对于规范化细节检查

在我看来,在定义顺序时,末尾的数字优先。您可以简化示例:
var s1=“a2”;var s2=“ä1”顺便说一句,Umlaut很重要。我想你可以在这里找到答案:@TimSchmelter Good find!已接受答案中的关键句:如果基础字母有任何差异,通常忽略重音差异。@Tim Schmelter:你能写一个答案让我接受吗?