我需要對包含單詞列表的數組進行排序,並使用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。