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

Mono sorts different on different machines

我有一个使用单声道的简单排序问题... 如果我 运行 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);
        }
    }
}

结果windows

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);
        }
    }
}

考虑到文化差异,这是意料之中的事情。来自 string.CompareTo(string) 文档:

This method performs a word (case-sensitive and culture-sensitive) comparison using the current culture. For more information about word, string, and ordinal sorts, see System.Globalization.CompareOptions.

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