C# Mono在不同的机器上排序不同

C# Mono在不同的机器上排序不同,c#,macos,mono,C#,Macos,Mono,我有一个简单的排序问题使用单。。。 如果在Mac和Windows上运行以下代码,则会得到不同的结果: using System; using System.Linq; public class Program { public static void Main() { var testArray = new string[] { "PȺFftFyaheâµ", "P6ZijTµȺut" }.OrderBy(t =&

我有一个简单的排序问题使用单。。。 如果在Mac和Windows上运行以下代码,则会得到不同的结果:

using System;
using System.Linq;

public class Program
{
    public static void Main()
    {
        var testArray = new string[]
        {
        "PȺFftFyaheâµ", "P6ZijTµȺut"
        }.OrderBy(t => t);

        foreach (var item in testArray)
        {
            Console.WriteLine(item);
        }
    }
}
结果窗口

P6ZijTµȺut
PȺFftFyaheâµ
结果Mac

PȺFftFyaheâµ
P6ZijTµȺut
有人知道这是怎么可能的吗?我们能做些什么来解决它

谢谢,修复程序是一个字符串比较器

class Program
{
    static void Main(string[] args)
    {
        var testArray = new string[] { "PȺFftFyaheâµ", "P6ZijTµȺut" }.OrderBy(t =>  t, StringComparer.Ordinal);
        foreach (var item in testArray)
        {
            Console.WriteLine(item);
        }
    }
}

鉴于文化差异,这是意料之中的。从文件中:

此方法使用当前区域性执行单词(区分大小写和区域性)比较。有关单词、字符串和顺序排序的更多信息,请参阅
System.Globalization.CompareOptions


为了确保代码在多个系统上的行为方式相同,您可以确保在所有系统上使用相同的区域性,或者指定一个不区分区域性的比较(例如
StringComparer.Ordinal
)作为
OrderBy

的第二个参数,因为区域性不同。从文件中:

此方法使用当前区域性执行单词(区分大小写和区域性)比较。有关单词、字符串和顺序排序的更多信息,请参阅
System.Globalization.CompareOptions


为了确保代码在多个系统上的行为方式相同,您可以确保在所有系统上使用相同的区域性,或者指定不区分区域性的比较(例如,
StringComparer.Ordinal
)作为
OrderBy

的第二个参数,实际上我们必须使用不变性区域性而不是Ordinal。它给了我一些关于阿拉伯字符的问题,有什么线索吗?@Frederiek:就我所知,
Ordinal
应该是完全不受文化影响的。当然,这取决于你看到了什么“问题”……啊,好的,我们所做的就是生成一个文件和文件夹的目录结构。这些文件和文件夹是从
“abcdefghijklmnopqrstuvxyzabefghijklmnopqrstuvxyz123456789-+!@#µɎɎɐ
中随机创建的。它现在可以工作了,但奇怪的是,
有序的
给出了不同的结果。我们实际上不得不使用不变性而不是有序的。它给了我一些关于阿拉伯字符的问题,有什么线索吗?@Frederiek:就我所知,
Ordinal
应该是完全不受文化影响的。当然,这取决于你看到了什么“问题”……啊,好的,我们所做的就是生成一个文件和文件夹的目录结构。这些文件和文件夹是从
“abcdefghijklmnopqrstuvxyzabefghijklmnopqrstuvxyz123456789-+!@#µ¨Æ223;ijȺضظ”
中随机创建的,现在它可以工作了,但是
有序的
给出不同的结果确实很奇怪