为什么要在字典中使用不可变值?

Ful*_*oof 5 .net c# linq collections dictionary

问题" 多值字典 " 的多个答案建议使用类TValue中的不可变类Dictionary<TKey, TValue>.

接受的Jon Skeet的答案提出了一个Pair具有readonly属性的类和@ teedyay使用不可变的答案Tuple.

这种方法的基本原理(或可能的好处)是什么?

和附带问题:如果相应的属性First和Second无论如何都没有setter,
为什么要使TFirst和TSecond只读:

private readonly TFirst first;
private readonly TSecond second;

public TFirst First
{
   get { return first; }
}

public TSecond Second
{
   get { return second; }
}
Run Code Online (Sandbox Code Playgroud)

更新:
我正在使用带有自定义类的字典来表示其中的值.
并且va lues正在更新.
让我们变成一成不变的可能原因(好处)是什么?

我看Lookup<TKey, TElement> Class也是不可改变的,以为我错过使用LINQ查询的一些好处(?)
如果是这样,你可以给我什么样的例子我错过?

Moh*_*oho 1

第二个问题的答案是,成员变量仍然可以在没有readonly关键字的情况下设置 - 仅在类本身内,但这仍然是可能的。

顺便说一句,这个类似乎是struct.