2009-12-29 64 views
3

我有一個現有的應用程序,我犯了使用String.GetHashCode並將其保存到磁盤的錯誤。現在我將應用程序升級到.Net 2.0,我發現那個決定已經回來咬我的屁股。是否存在.Net 1.1兼容的.Net 2.0代碼中實現的String.GetHashCode?

我很想知道是否有人知道.Net 2.0兼容字符串散列算法的.Net 2.0實現。

顯然,最好的解決方案是給自己買一臺時間機器,回到2002年,甚至考慮用這種方式使用散列碼。由於這似乎不可能我正在尋找一種解決方法。我有現有的用戶在他們的系統上使用這些數據,所以我不可能對哈希或其他類似的東西進行一次大的轉換。

隨着更改爲2.0,我將更新代碼,以便當然使用MD5或SHA。

我考慮從Mono中提取String.GetHashCode源碼,但由於Mono是GPL,而且我的應用程序是商業應用程序,所以它不是一個選項。我甚至不知道Mono實現是否與MS .Net實現兼容,因爲GetHashCode的合約不需要它兼容。

任何想法?

+0

你確定哈希函數已經改變? MSDN上沒有列出這種更改。 – Amy 2009-12-29 22:51:41

+0

忽略我以前的評論。我在這裏找到它:http://msdn.microsoft.com/en-us/netframework/aa497241.aspx – Amy 2009-12-29 23:20:54

回答

6

你不是唯一的一個,看來:Getting .NET 1.1 CLR String Hash Codes In The .NET 2.0 CLR

鏈接到BackCompatibleStringComparer,其中(據說,我無法驗證)顯示的是老GetHashCode()實施。

+0

感謝您的提示。我知道StackOverflow會幫助我。 有趣的是,他們會將它包含在2.0框架中,但不能公開訪問。額外有趣的是,它從DataObject和Enterprise Library中調用。看起來他們的一些內部開發者犯了同樣的錯誤。 – 2009-12-30 04:44:03