C# OrderBy中出现意外结果

C# OrderBy中出现意外结果,c#,.net,asp.net-core,C#,.net,Asp.net Core,我在运行一个按字母顺序排列电子邮件的测试用例时偶然发现了这一点 var test1 = new List<string> { "ZZZ", "AAA", "BBB" }; var result1 = test1.OrderBy(t => t).ToList(); // Expected: AAA, BBB, ZZZ // Result: BBB, ZZZ, AAA var test2 = new List<string> { "ZK", "AB"

我在运行一个按字母顺序排列电子邮件的测试用例时偶然发现了这一点

var test1 = new List<string>
{
    "ZZZ", "AAA", "BBB"
};

var result1 = test1.OrderBy(t => t).ToList();
// Expected: AAA, BBB, ZZZ
// Result: BBB, ZZZ, AAA

var test2 = new List<string>
{
    "ZK", "AB", "BA"
};

var result2 = test2.OrderBy(t => t).ToList();
// Expected: AB, BA, ZK
// Result: AB, BA, ZK
var test1=新列表
{
“ZZZ”、“AAA”、“BBB”
};
var result1=test1.OrderBy(t=>t.ToList();
//预期:AAA、BBB、ZZZ
//结果:BBB、ZZZ、AAA
var test2=新列表
{
“ZK”、“AB”、“BA”
};
var result2=test2.OrderBy(t=>t.ToList();
//预期:AB、BA、ZK
//结果:AB,BA,ZK
我在.NET4.6.1和.NETCore1.0、2.0和2.1中都有这种行为


我是在这里遗漏了什么,还是这确实是一个奇怪的错误?

这是由于您运行它的文化造成的

在某些文化中,
AA
将被解释为
Å
,这在词汇上位于
Z
B


使用带有
IComparer
的重载来覆盖该行为。

我已复制并粘贴了您的代码,它可以按预期工作。您是如何检查结果的?是的,正如“SeM”所说,您的代码按预期工作。您是如何检查结果的?test2.OrderBy(t=>t,StringComparer.InvariantCulture)