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