将域对象用作字典中的键是一种好习惯吗?
我有一个场景,我使用 NHibernate
填充我的域对象.
为了执行业务逻辑,我需要查找字典。我可以利用 要么
IDictionary<int, ValueFortheObject>
或
Dictionary<DomainObject, ValueFortheObject>
第二个选项对我来说似乎更好
我可以编写更简单的测试用例,并且可以在测试用例中使用真实的域对象,而不是使用
Mock<DomainObject>
(如果我选择第一个选项)因为 setter 在Id
上是private
在所有域对象上。代码的可读性更高为
Dictionary<Hobbit,List<Adventures>>
对我来说比Dictionary<int,List<Adventures>>
更具可读性评论暗示 int 是hobbitId
特别是作为参数传递时
<罢工> 我的问题是:
- <罢工>
使用第一个选项比使用第二个选项有什么优势(我可能会盲目地错过)?
使用第二种方法会有性能问题吗?
罢工>
更新 01:
我的领域模型实现了这些,并且在执行操作时它们不会发生变化。
使用它们作为键会有性能问题吗?还是我完全忽略了这里的要点,性能/内存与正在使用的键无关?
更新 02:
我的问题是
- 如果我使用对象而不是原始类型作为键和为什么/如何,性能或内存会不会有任何问题?
最佳答案
您将遇到的最大问题是您不能在 key 对象作为 key 执行滚动时更改 key 对象。
当我说“变异”时,我的意思是您的键对象必须实现 Equals
和 GetHashCode
才能用作字典的键。当对象用作键时,您对该对象所做的任何操作都不得更改 GetHashCode
的值,也不得导致 Equals
与集合中的任何其他键一起评估为 true。
关于c# - 在字典中使用对象作为键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13894935/