2013-01-17 29 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()都应该有一个有意义的实现。

相关问题