OrderBy 不适用于我的电脑

OrderBy does not work on my computer only

我们首先有一个用于数据库的旧的遗留数据库生成工具。我在没有实际更改的情况下更改了内容。我已将其归结为对列进行排序。

Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("sv-SE");
var sortThis = new[] { "VatNumber", "VisiAvtalsnummerCompanies", "WinZipPassword" }
    .OrderBy(s => s, StringComparer.CurrentCultureIgnoreCase)
    .ToList();

输出应为“VatNumber”、“VisiAvtalsnummerCompanies”、“WinZipPassword”,在瑞典文化中,V 在字母表中位于 W 之前。

但在我的电脑上输出的是“VatNumber”、“WinZipPassword”、“VisiAvtalsnummerCompanies”

C# 上的服务器fiddle 输出正确

https://dotnetfiddle.net/sXJjD6

编辑:

StringComparer.Create(new CultureInfo("sv-SE"), true)
                .Compare("V", "W"); // -1  correct

StringComparer.Create(new CultureInfo("sv-SE"), true)
                .Compare("VB", "WA"); // 1  incorrect

在 2006 年之前,V 和 W 在瑞典语中的排序似乎是一样的:瑞典语似乎并没有真正使用 W(除了名字和导入词),而且 V 和 W 有时可以互换使用,所以这个选择排序顺序是为了减少混淆 [1].

早在 2006 年,第 13 版 SAOL(Svenska Akademiens OrdLista;瑞典语参考词典)就宣布 W 本身就是一个字母,并开始将其作为单独的字母分类为 V .

CLDR,定义此类内容的 Unicode 通用语言环境数据存储库,为瑞典语引入了两种排序规则:“标准”和“改革”。他们在 2007 年将默认排序规则更改为“改革”[2],这会影响使用 CLDR 作为参考的任何内容。

Windows 在 1903 更新中集成了使用 CLDR 数据的 Unicode 国际组件 (ICU)。但是,这应该只会影响 .NET 5:早期的 .NET 版本应该仍然使用国家语言支持 (NLS) 库 [3].

我没能找到关于 1909 版和 2004 版之间 NLS 更改的任何数据。他们可能最终赶上了 CLDR,我不知道。在 Windows 7 中对排序进行了一些重大更改,但自 [4] 以来我找不到任何内容。如果您的目标是 .NET 5,并从 1903 升级,那么我可以解释一下。

如果您的目标是 .NET 5+,或者 运行 Linux,您应该一直在使用 CLDR 数据。

[1]: https://en.wikipedia.org/wiki/Swedish_alphabet#Uncommon_letters
[2]: https://github.com/unicode-org/cldr/commit/aaa134f4f74db91b781be1c8b9d9e9f1fd123c0e
[3]: https://docs.microsoft.com/en-us/dotnet/standard/globalization-localization/globalization-icu
[4]: https://docs.microsoft.com/en-us/windows/win32/win7appqual/nls-sorting-changes

我遇到的其他随机链接,但没有构成我的答案的一部分:

  1. https://unicode-org.atlassian.net/browse/CLDR-1035#icft=CLDR-1035
  2. https://unicode-org.atlassian.net/browse/CLDR-2143?jql=text%20~%20%22swedish%20collation%22
  3. https://sourceware.org/bugzilla/show_bug.cgi?id=9724
  4. https://bugzilla.redhat.com/show_bug.cgi?id=17005
  5. Sort list of tuples considering locale (swedish ordering)
  6. http://www.softwolves.pp.se/misc/arkiv/sv/18/9009.html
  7. https://github.com/dotnet/runtime/issues/29592