2010-06-07 120 views
1

我在寫一個c#應用程序,它將處理一些文本並提供基本的查詢功能。爲了確保爲其他語言提供最好的支持,我允許應用程序的用戶指定System.Globalization.CultureInfo(通過「en-GB」樣式代碼)以及使用System的全部排序選項.Globalization.CompareOptions標誌枚舉。文化敏感GetHashCode

對於常規的字符串比較我然後使用以下的組合:一個接受培養和選項
b)對於我緩存的字節數據的一些本體方法

一個)String.Compare過載(KEYDATA )來自CompareInfo.GetSortKey(接受選項的重載)並使用KeyData的逐字節比較。

這看起來很好(雖然請評論如果你認爲這兩種方法不應該混合),但是我有理由使用HashSet類,它只對IEqualityComparer> <>有過載。

MS文檔似乎表明我應該使用StringComparer(實現兩者的IEqualityComparer <>和IComparer的<>),但這似乎只支持從CompareOptions了「忽略大小寫」選項,而不是「IgnoreKanaType」,「IgnoreSymbols」 「IgnoreWidth」等

我假設忽略這些其他選項的StringComparer可能會產生兩個字符串的不同的哈希碼,這可能會被認爲是相同的使用我的其他比較選項。因此,我會從我的申請中得到不正確的結果。

現在唯一想到的是創建自己的IEqualityComparer,它從SortKey.KeyData生成一個哈希碼,並比較使用String.Compare超載的eqality。

有什麼建議嗎?

回答

0

您肯定需要實現自己的IEqualityComparer <>,但我不認爲哈希碼必須發揮作用。就像你說的那樣使用string.Compare超載。