2013-01-17 62 views
1

將字典的鍵設置爲引用類型可以嗎?字典是否存儲這些對象的引用或存儲對象實例? 我有一個字典,我存儲如果列表加載或不作爲布爾值;如果它真的存儲了大量的列表,這將是麻煩的。將字典鍵設置爲對象類型

public Dictionary<object, bool> isloaded; 
+0

你需要實現'有一個自定義類型的關鍵GetHashCode'當你不想通過僅供參考比較。爲什麼你需要一個'Object'作爲鍵而不是強類型鍵? –

+0

基於此:http://msdn.microsoft.com/en-us/library/xfhwa508.aspx它們的密鑰可以是任何類型。技術上來說,字符串是引用類型,它們經常用作鍵。不過,我認爲一個關鍵字應該是強類型 – ScruffyDuck

回答

4

這很完美 - 它只存儲參考,而不是副本。

但是,你必須要小心,插入一個關鍵對象之後,你不要更改任何被用來計算關鍵的GetHashCode的關鍵對象的字段的()。

這是因爲對象的GetHashCode()方法被用於生成在內部使用作爲密鑰的整數鍵。顯然,如果在插入密鑰後發生變化,它將會出現在錯誤的地方,並且會發生不好的事情。

(我個人認爲你應該永遠只能使用不可變對象鑰匙。)

+0

+1,因爲您以同樣的順序思考了與我在答案中所做的相同的問題;-) –

+0

對您也是如此。 :) –

+0

這不是見仁見智......存儲在哈希表(即'Dicitonary項目'應該永遠是一成不變的,或者至少是,參與平等屬性/哈希應該是一成不變的。不能的後果注意這是通過改變密鑰來破壞字典變得微不足道的。 – spender

3

是的,這是「OK」。

的字典中存儲的參考;它不會複製實例。

注意,這可能是有問題的,如果主要對象是可變的,在某種程度上,他們的哈希碼將會改變得到改變。還要注意,無論用作關鍵字的引用類型是什麼,其方法GetHashCode()都應該有一個有意義的實現。

相關問題