5

質問「多値ディクショナリTValue」に対する複数の回答は、クラスのように不変クラスを使用することを提案していますDictionary<TKey, TValue>

受け入れられたJon Skeetの回答Pairは、読み取り専用プロパティを持つクラスと、不変を使用する@teedyayの回答Tupleを提案しています。

そのようなアプローチの理論的根拠 (または考えられる利点) は何ですか?

副次的な質問: First と Second のそれぞれのプロパティにセッターがない場合に、 TFirst と TSecond を読み取り専用にする
理由:

private readonly TFirst first;
private readonly TSecond second;

public TFirst First
{
   get { return first; }
}

public TSecond Second
{
   get { return second; }
}

更新:
値のカスタム クラスを持つ辞書を使用しています。
そして値は更新されています。
それらを不変にする理由(利点)は何ですか?

それも不変であることがわかり、Lookup<TKey, TElement> ClassLINQ クエリを使用する利点を見逃していると思いました (?)
もしそうなら、何が欠けているのか例を挙げていただけますか?

4

2 に答える 2

4

私の経験では、基本的に、不変性によってさまざまなことが読みやすくなります。たとえば、JavaCalendarDateクラスの大きな問題点の 1 つは、それらの可変性です。それらが変更可能であることを忘れがちで、コンストラクターで参照のコピーを取得すると、参照先のオブジェクトが他の何かによって変更されていることがわかります。そのため、オブジェクトを変更するものない場合でも、防御的なコピーを取り始めます... それはすべて非常に面倒です.

もちろん、可変性が求められる時期もありますが、多くの場合、不変性の方が単純に優れています。

于 2013-03-31T21:21:36.747 に答える