gpt4 book ai didi

c# - 在字典中使用对象作为键

转载 作者:太空宇宙 更新时间:2023-11-03 20:20:26 27 4
gpt4 key购买 nike

将域对象用作字典中的键是一种好习惯吗?

我有一个场景,我使用 NHibernate 填充我的域对象.

为了执行业务逻辑,我需要查找字典。我可以利用要么

IDictionary<int, ValueFortheObject> 

Dictionary<DomainObject, ValueFortheObject>

第二个选项对我来说似乎更好

  1. 我可以编写更简单的测试用例,并且可以在测试用例中使用真实的域对象,而不是使用 Mock<DomainObject> (如果我选择第一个选项)因为 setter 在 Id 上是private在所有域对象上。

  2. 代码的可读性更高为Dictionary<Hobbit,List<Adventures>>对我来说比 Dictionary<int,List<Adventures>> 更具可读性评论暗示 int 是 hobbitId特别是作为参数传递时

<罢工>我的问题是:

    <罢工>
  1. 使用第一个选项比使用第二个选项有什么优势(我可能会盲目地错过)?

  2. 使用第二种方法会有性能问题吗?

更新 01:

我的领域模型实现了这些,并且在执行操作时它们不会发生变化。

使用它们作为键会有性能问题吗?还是我完全忽略了这里的要点,性能/内存与正在使用的键无关?

更新 02:

我的问题是

  1. 如果我使用对象而不是原始类型作为键和 为什么/如何,性能或内存会不会有任何问题?

最佳答案

您将遇到的最大问题是您不能在 key 对象作为 key 执行滚动时更改 key 对象。

当我说“变异”时,我的意思是您的键对象必须实现 EqualsGetHashCode 才能用作字典的键。当对象用作键时,您对该对象所做的任何操作都不得更改 GetHashCode 的值,也不得导致 Equals 与集合中的任何其他键一起评估为 true。

关于c# - 在字典中使用对象作为键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13894935/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com