我需要对包含单词列表的数组进行排序,并使用binarysearch搜索相同的单词。由于某些原因,单词列表必须始终使用“en-US”的排序规则排序,即美国地区设置。该代码将在各种国际操作系统下运行,当然这将意味着根据使用的本地区域设置,单词列表将根据不同进行排序。在运行立陶宛区域设置的计算机/设备上可能会出现一个问题。为什么?由于在大多数语言中的字母“Y”是按照X- Y -Z排序的,而在立陶宛语中,排序顺序是I-Y -J。这种行为会对我的程序造成破坏。.net - Array.Sort和Array.BinarySearch问题 - 文化和全球化
在一个台式电脑,我可以通过暂时改变区域设置为美国英语:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture( “EN-US”)
然而,因为我正在为Windows Mobile(CF.NET)开发,这段代码不可能实现。
我发现一些黑客可以让我以编程方式更改设备上的区域设置,但他们不是“官方”,并认为有风险,所以我宁愿避免这些。
所以我的问题是:如何强制Array.Sort和Array.BinarySearch使用CultureInfo =“en-US”时排序和搜索无论设备上设置的区域设置?
我相信我可以使用:
和实施的Comparer考虑到的CultureInfo(并将其设置为“EN-US”),但我不知道该怎么做,尽管努力。如果任何人都可以在VB.Net或C#中发布一些示例代码或者解释如何去做,我将非常感激。
如果您了解CF.Net中的任何其他解决方案,那么我当然会全力以赴。
谢谢。
编辑:
我会考虑Twanfosson的答案,因为我的问题接受的解决方案明确指出,我想保持与英语语言关联。
但是,为了灵活性,我相信Guffa的答案是最好的。为什么?我们再举一个例子:在德语中,字母Ö被排序为Ö -X-Z,而在瑞典语和芬兰语中,顺序是X-Z- Ö。在爱沙尼亚语中,排序顺序是Z-Ö -X。复杂,不是吗? Guffa的解决方案将使我能够在德国区域设置下运行的设备上强制瑞典语排序(更改CultureInfo)。使用Comparer.DefaultInvariant及其与英语的关联在这种情况下不会有帮助,可能信Ö将以O结束。因此,我的投票将转到Guffa。