1
1
可变类在字典和其他依赖GetHashCode和Equals的类中工作得很糟糕。 在您描述的场景中,使用可变对象,我建议您执行以下操作之一:
或
对于第一种情况,Dictionary的工作(几乎)与预期一样,在查找和插入方面会有性能损失:在这两种情况下,将为Dictionary中已经存在的每个元素调用Equals,直到比较返回true为止。实际上,您正在恢复到列表的性能 第二种方法是告诉程序员将使用您的类“不,您不能在字典中使用它”。 不幸的是,据我所知,没有在编译时检测它的方法,但当代码第一次向字典中添加元素时,这将失败,很可能是在开发的早期,而不是仅在具有不可预测的输入集的生产环境中发生的那种错误。 最后但并非最不重要的一点是,忽略“可变”问题,并使用成员变量实现GetHashCode:现在您必须知道,当类与字典一起使用时,您不能随意修改它。在某些情况下,这是可以接受的,但在另一种情况下,这是不可接受的 |
2
0
这完全取决于
所以,确定如果修改
证明它的代码:
所以来回答你的问题。您希望具有作为基础的不可变值
还有一点,
|
3
-3
经过多次讨论和阅读其他SO关于该主题的答案,最终 this ReSharper help page 这对我来说是一个很好的总结:
当然,如果不可能快速修复,它不会建议该怎么做。然而,它确实表明,只有“在可能的情况下”才应使用这些快速修复方法,这意味着可能会抑制检查。Gian Paolo对此的回答建议抛出一个异常,该异常将阻止类被用作键,并且如果无意中将其用作键,则会在开发早期出现。
然而
|
Emanuel Pinho · 无不变目标push的角度变化检测策略 6 年前 |
MingtyeP · 如何使用不可变js取消移动列表中的每个元素? 6 年前 |
Brannon · 让赋值运算符在申报时工作 6 年前 |
Javallion · JAVA中的不可变对象初始化 7 年前 |
Ankush Pandit · 字符串与字符串数组元素之间的比较 7 年前 |
plamkata__ · Swift到Kotlin,管理不可变列表 7 年前 |