如果我執行以下語句:爲什麼string.Compare似乎不一致地處理重音字符?
string.Compare("mun", "mün", true, CultureInfo.InvariantCulture)
結果是「-1」,表明「門」與「門」的數值更低。
但是,如果我執行該語句:
string.Compare("Muntelier, Schweiz", "München, Deutschland", true, CultureInfo.InvariantCulture)
我得到 '1',表明 '曼泰利耶,Schewiz' 應該走過去。
這是比較中的錯誤嗎?或者更可能的,是有一個規則,我應該字符串進行排序,當包含重音
的原因,這是一個問題,是因爲考慮到,我在整理列表,然後這樣做的意思手動二進制過濾器獲取以'xxx'開頭的每個字符串。
此前我使用的是Linq'Where'方法,但是現在我必須使用由另一個人編寫的這個自定義函數,因爲他說它表現更好。
但是自定義函數似乎沒有考慮到.NET所具有的任何'unicode'規則。因此,如果我告訴它按'mün'進行過濾,即使列表中有以'mun'開頭的項目,它也不會找到任何項目。
這似乎是因爲重音字符的排序不一致,這取決於重音字符之後的字符。
OK,我想我已經解決了這一問題。
過濾器之前,我做基於每個字符串,其中ñ是搜索字符串的長度的第一ñ字母排序。
它的時刻是這樣,我希望在.NET Framework是開放源代碼的,所以我可以在調試模式下逐步完成並找出它正在做什麼。 – Jonathan
@jonathanconway:單步執行基類庫的源代碼是可能的,請參閱http://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net- framework-source-code.aspx –
@divo感謝您的參考。從未意識到這是可能的! – Jonathan