"Multi value Dictionary"という複数の答えは、TValue
としてDictionary<TKey, TValue>
クラスに不変クラスを使用することを提案しています。なぜディクショナリに不変の値を使用しますか?
受け入れられたJon Skeet's answerは、読み取り専用のプロパティを持つクラスPair
と、変更不可能なTuple
を使用する@teedyay's answerを提案しています。
このようなアプローチの理論的根拠は?
および担保質問:
なぜto make TFirst and TSecond readonlyそれぞれの特性を第1、第2は、とにかくセッターを持っていない場合:
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クエリを使用していくつかの利点欠場することを考え(?)をもしそうなら
は、あなたは私が何を欠場かに私に例を与えることができますか?
最初はセッターを持っていないかもしれませんが、読み取り専用でない場合は、最初に直接設定することを制限しません。 – Robert
teedyayの答えは、「タプル」の不変性は付随的であり、「タプル」は2つの値をペアにする最も単純な方法です。彼が別の機会に書いた 'Pair'タイプのコードを投稿したときに、Jon Skeetの答えに付随することもあります。 –
私は@DanielFischerに同意します。私はそれが会話に付随していると思います。特に、実装がGetHashCodeのオーバーライドを提供していると思います。変更可能な型のGetHashCodeをオーバーライドする警告があります。 –