问题“Multi value Dictionary”的多个答案建议在Dictionary<TKey, TValue>
类中使用不可变类作为TValue
。
已接受的Jon Skeet's answer建议使用只读属性的类Pair
和@teedyay's answer来使用不可变Tuple
。
此类方法的基本原理(或可能的好处)是什么?
和抵押问题:
为什么to make TFirst and TSecond readonly如果相应的属性First和Second仍然没有setter:
private readonly TFirst first;
private readonly TSecond second;
public TFirst First
{
get { return first; }
}
public TSecond Second
{
get { return second; }
}
更新
我正在使用带有自定义类的字典来表示其中的值
并且va lues正在更新
让我们变成一成不变的可能原因(好处)是什么?
我看到Lookup<TKey, TElement> Class
也是不可变的,并且认为我错过了使用LINQ查询的一些好处(?)
如果是这样,你能举例说明我错过了什么吗?
答案 0 :(得分:4)
基本上,不变性使我在经验中更容易理解各种事物。例如,Java的Calendar
和Date
类中的一个重点是它们的可变性。这很容易忘记他们是可变的,在构造函数中复制一个引用,然后发现其他东西会改变你已经拥有的对象参考。因此,即使 没有任何东西要改变对象,你也会开始采取防御性副本......这一切都变得非常烦人。
当然,还有可变性的时间 - 但在很多情况下,不变性就更好了。
答案 1 :(得分:1)
第二个问题的答案是成员变量仍然可以在没有readonly
关键字的情况下进行设置 - 仅在类本身内,但仍然可以。
struct
的坚实候选者。