C#。如何确保按字符串属性对对象列表排序的最终结果在每台计算机上都是相同的
我有一个复杂对象的列表,我想按字符串属性对该列表进行排序。现在的问题是字符串包含立陶宛字母(),List.OrderBy()的最终结果在我的朋友计算机上与在我的计算机上看起来不同。是否有办法确保列表在每台计算机上的排序方式相同 我试着加上C#。如何确保按字符串属性对对象列表排序的最终结果在每台计算机上都是相同的,c#,linq,C#,Linq,我有一个复杂对象的列表,我想按字符串属性对该列表进行排序。现在的问题是字符串包含立陶宛字母(),List.OrderBy()的最终结果在我的朋友计算机上与在我的计算机上看起来不同。是否有办法确保列表在每台计算机上的排序方式相同 我试着加上 Thread.CurrentThread.CurrentCulture = new CultureInfo("lt-LT"); var testModel = model.products.OrderBy(x => x.title, StringComp
Thread.CurrentThread.CurrentCulture = new CultureInfo("lt-LT");
var testModel = model.products.OrderBy(x => x.title, StringComparer.CurrentCulture).ToList();
但是它没有解决问题。尝试显式指定区域性,而不是依赖当前线程区域性:
var culture = new CultureInfo("lt-LT");
var testModel = model.products.OrderBy(x => x.title,
StringComparer.Create(culture, false));
根据机器的设置和/或.NET版本的不同,也可能存在差异(我不是立陶宛文化设置方面的专家,所以我不能肯定)。您使用的是
StringComparer.CurrentCulture
。
这在您朋友的系统上可能不同
明确(推荐)指定OrderBy()方法的区域性。您还可以使用InvariantCulture
,尽管这可能不是UI中显示的文本的最佳选择
还可以考虑使用EnUM的OrthBee()方法的超载,它允许更多的控制如何处理比较。
MSDN在这里有一篇优秀的文章:他们正在提前设置当前线程的区域性。之后还会有区别吗?@Khan:这就是方法重载的作用:它会覆盖系统设置和当前线程可能是的任何其他内容,但只覆盖单个OrderBy()调用。