將字典的鍵設置爲引用類型可以嗎?字典是否存儲這些對象的引用或存儲對象實例? 我有一個字典,我存儲如果列表加載或不作爲布爾值;如果它真的存儲了大量的列表,這將是麻煩的。將字典鍵設置爲對象類型
public Dictionary<object, bool> isloaded;
將字典的鍵設置爲引用類型可以嗎?字典是否存儲這些對象的引用或存儲對象實例? 我有一個字典,我存儲如果列表加載或不作爲布爾值;如果它真的存儲了大量的列表,這將是麻煩的。將字典鍵設置爲對象類型
public Dictionary<object, bool> isloaded;
這很完美 - 它只存儲參考,而不是副本。
但是,你必須要小心,插入一個關鍵對象之後,你不要更改任何被用來計算關鍵的GetHashCode的關鍵對象的字段的()。
這是因爲對象的GetHashCode()方法被用於生成在內部使用作爲密鑰的整數鍵。顯然,如果在插入密鑰後發生變化,它將會出現在錯誤的地方,並且會發生不好的事情。
(我個人認爲你應該永遠只能使用不可變對象鑰匙。)
+1,因爲您以同樣的順序思考了與我在答案中所做的相同的問題;-) –
對您也是如此。 :) –
這不是見仁見智......存儲在哈希表(即'Dicitonary項目
是的,這是「OK」。
的字典中存儲的參考;它不會複製實例。
注意,這可能是有問題的,如果主要對象是可變的,在某種程度上,他們的哈希碼將會改變得到改變。還要注意,無論用作關鍵字的引用類型是什麼,其方法GetHashCode()
都應該有一個有意義的實現。
你需要實現'有一個自定義類型的關鍵GetHashCode'當你不想通過僅供參考比較。爲什麼你需要一個'Object'作爲鍵而不是強類型鍵? –
基於此:http://msdn.microsoft.com/en-us/library/xfhwa508.aspx它們的密鑰可以是任何類型。技術上來說,字符串是引用類型,它們經常用作鍵。不過,我認爲一個關鍵字應該是強類型 – ScruffyDuck