我有一个简单的排序问题,使用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);
}
}
}
答案 0 :(得分:4)
鉴于文化差异,这是可以预期的。来自string.CompareTo(string)
文档:
此方法使用当前文化执行单词(区分大小写和文化敏感)比较。有关单词,字符串和序数排序的更多信息,请参阅
System.Globalization.CompareOptions
。
要确保代码在多个系统上的行为方式相同,您可以确保在所有系统上使用相同的区域性,或者指定区域性不敏感的比较(例如StringComparer.Ordinal
)作为{的第二个参数{1}}。