Mono在不同的机器上进行不同的分类

时间:2015-11-16 13:13:37

标签: c# macos mono

我有一个简单的排序问题,使用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 => 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);
        }
    }
}

1 个答案:

答案 0 :(得分:4)

鉴于文化差异,这是可以预期的。来自string.CompareTo(string)文档:

  

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

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