【发布时间】:2013-03-21 22:26:18
【问题描述】:
问题“Multi value Dictionary”的多个答案建议在Dictionary<TKey, TValue> 类中使用不可变类作为TValue。
接受的Jon Skeet's answer 提出了一个具有只读属性的类Pair 和@teedyay's answer 以使用不可变的Tuple。
这种方法的基本原理(或可能的好处)是什么?
附带问题:
为什么 to make TFirst and TSecond readonly 如果各自的属性 First 和 Second 无论如何都没有设置器:
private readonly TFirst first;
private readonly TSecond second;
public TFirst First
{
get { return first; }
}
public TSecond Second
{
get { return second; }
}
更新:
我正在使用带有自定义类的字典来获取其中的值。
并且值正在更新。
我使它们不可变的可能原因(好处)是什么?
我看到 Lookup<TKey, TElement> Class 也是不可变的,并认为我错过了使用 LINQ 查询的一些好处 (?)
如果是这样,你能给我举个例子,我想念什么吗?
【问题讨论】:
-
First 可能没有设置器,但如果它不是只读的,则不会限制您直接设置。
-
至于 teedyay 的回答,
Tuple的不变性可能是偶然的,Tuple只是将两个值配对在一起的最简单方法。可能是 Jon Skeet 的回答也是偶然的,因为他发布了他为另一个场合编写的Pair类型的代码。 -
我同意@DanielFischer 的观点,我只是认为这是对话的偶然性,尤其是当他的实现提供了对GetHashCode 的覆盖时。有关于在可变类型上覆盖 GetHashCode 的警告。
标签: c# .net linq collections dictionary