C# 将字典键设置为对象类型

C# 将字典键设置为对象类型,c#,.net,list,generics,pass-by-reference,C#,.net,List,Generics,Pass By Reference,将字典的键设置为引用类型可以吗?字典是存储这些对象的引用还是存储对象实例? 我有一个字典,我正在存储列表是否作为布尔值加载;如果它真的存储了大量的列表,那就麻烦了 public Dictionary<object, bool> isloaded; 公共字典已加载; 完全可以-它只存储引用,而不是副本 但是,您必须小心,插入密钥对象后,不要更改用于计算密钥的GetHashCode()的密钥对象的任何字段 这是因为对象的GetHashCode()用于生成内部用作键的整数键。显然,如果

将字典的键设置为引用类型可以吗?字典是存储这些对象的引用还是存储对象实例? 我有一个字典,我正在存储列表是否作为布尔值加载;如果它真的存储了大量的列表,那就麻烦了

public Dictionary<object, bool> isloaded; 
公共字典已加载;

完全可以-它只存储引用,而不是副本

但是,您必须小心,插入密钥对象后,不要更改用于计算密钥的GetHashCode()的密钥对象的任何字段

这是因为对象的GetHashCode()用于生成内部用作键的整数键。显然,如果在插入密钥后发生更改,它将位于错误的位置,并且会发生不好的事情


(我个人认为您应该只使用不可变对象作为键。)

这很好-它只存储引用,而不是副本

但是,您必须小心,插入密钥对象后,不要更改用于计算密钥的GetHashCode()的密钥对象的任何字段

这是因为对象的GetHashCode()用于生成内部用作键的整数键。显然,如果在插入密钥后发生更改,它将位于错误的位置,并且会发生不好的事情

(我个人认为您应该只对键使用不可变对象。)

是的,它是“ok”

字典储存参考文献;它不会复制实例

请注意,如果密钥对象是可变的,并且以其哈希代码会改变的方式进行更改,则这可能会有问题。还请注意,无论用作键的引用类型是什么,它们的
GetHashCode()
方法都应该有一个有意义的实现。

是,它是“ok”

字典储存参考文献;它不会复制实例


请注意,如果密钥对象是可变的,并且以其哈希代码会改变的方式进行更改,则这可能会有问题。还请注意,无论用作键的引用类型是什么,它们的
GetHashCode()
方法都应该有一个有意义的实现。

当您不想仅通过引用进行比较时,您需要使用自定义类型作为键来实现
GetHashCode
。为什么需要一个
对象
作为键而不是强类型键?基于此:它们可以是任何类型的键。从技术上讲,字符串是引用类型,经常用作键。然而,我认为键应该是强类型的。当您不想仅通过引用进行比较时,您需要使用自定义类型作为键来实现
GetHashCode
。为什么需要一个
对象
作为键而不是强类型键?基于此:它们可以是任何类型的键。从技术上讲,字符串是引用类型,经常用作键。但是,我认为密钥应该是强类型+1,因为您的想法与我在回答中的想法相同,顺序相同;-)这不是意见的问题。。。存储在哈希表中的项(即,
Dicitonary
应该始终是不可变的,或者至少,参与相等/哈希的属性应该是不可变的。未能遵守这一点的后果是,通过改变key.my“objects”来损坏字典变得微不足道不会在执行过程中被重建。我想这不会是一个问题。+1因为你和我在回答中思考的问题是一样的,以同样的顺序;-)这不是意见的问题。。。存储在哈希表中的项(即,
Dicitonary
应该始终是不可变的,或者至少,参与相等/哈希的属性应该是不可变的。未能遵守这一点的后果是,通过改变key.my“objects”来损坏字典变得微不足道不会在执行期间重建。我想这不会是一个问题。