2017-01-22 69 views
2

我碰到一些奇怪的VB代碼,當我即將一些VB代碼轉換爲C#:CINT和GetHashCode

totalLinks = table1.Rows(i).Item("qty").GetHashCode) * CInt(table2.Rows(i).Item("numOfLinks").GetHashCode + 1) 

(業務邏輯應在總的聯繫越來越=數量* numOfLinks)。

table1是一個Datatable,而數量& numOfLinks是它的兩列。

問題1:我們可以通過將'CInt'應用於上面的哈希碼來得到一個整數嗎?

問題2:讓hashcode加1然後轉換爲像上面那樣的整數意味着什麼? (應該先轉換爲整數然後再加1?或者我實際上誤解了代碼?)

我不知道如何將其轉換爲C#,然後才明白其含義。謝謝!

回答

4

有人不知道他們在用這段代碼做什麼,但只是很幸運,它的工作。

GetHashCode恰好會返回Integer變量的基礎值,因爲實際上沒有任何值可以散列。

因此,你可以(應該)根本不理會的GetHashCode代碼和代碼轉換爲

totalLinks = CInt(table1.Rows(i).Item("qty")) * (CInt(table2.Rows(i).Item("numOfLinks")) + 1) 
+0

感謝您的回答,這是有道理的吧! – DennisL

+0

我看到GetHashCode會將哈希碼轉換爲對象的MSDN,請問爲什麼沒有哈希值?該列不是一個對象? – DennisL

+0

數據庫列類型幾乎肯定是一個整數(您可以檢查列的類型),所以當從數據庫中檢索值時,它將存儲爲System.Int32,實際上它不是一個對象,這就是爲什麼代碼一直工作。如果它是一個實際的對象(例如字符串),那麼你會有一些非常奇怪和不正確的乘法值。 –