4

Dictionary<TKey, TValue>.TryGetValueメソッドが を返す場合true、パラメータvalueには指定されたキーに関連付けられた値が含まれます。

指定されたキーに関連付けられた値を変更する例をいくつか読みました。TryGetValueメソッドを呼び出した後、キーに関連付けられた値の更新がインデクサーによって実行され、さらにアクセスが行われますDictionary(次のコードを参照)。

var d = new Dictionary<string, MyClass>();
...
MyClass obj;
if (d.TryGetValue(key, out obj))
{
    d[key].Update(...); // update the value
}

objオブジェクトは、キーに関連付けられた値への参照です。以下のコードのように、オブジェクトを直接使用して値を更新してみませんか?

MyClass obj;
if (d.TryGetValue(key, out obj))
{
    obj.Update(...); // update the value
}
4

2 に答える 2

4

以下のコードのように、オブジェクトを直接使用して値を更新してみませんか?

そもそも変更可能であると仮定すると、既存のルックアップ結果を使用することは絶対に理にかなっています。あなたが示したコードの最初のスニペットは無意味に非効率的です。

より良い例を探してください:)

于 2012-09-03T08:43:28.343 に答える
1

サンプルコードは実際のコードと同じではありません。それは特定のポイントを示しており、他には何も示していません。これは、多くの例が最適ではないことを意味する可能性があります (ToList()実際にはそれを必要としない linq サンプル コードで決して使用しないと約束できますか? コードを遅くすることが唯一の効果である場合に頻繁に使用されるのはそのためだと確信しています) ) そして無意味な非常に多く。

これは悪いことではありません。サンプルコードのコメントは、説明されていることを説明します。実際のコードでは、人々が理解することを期待する必要があります. その間、なぜ奇妙なことをしているのかについては文書化されません。それは周囲のテキストに記載されているか、答えが単に「この機能を示しているからです。それ以上のものではない」ためです。実際のコードでは、驚くべきものや奇妙に見えるものはすべて、常にコメントで説明する必要があります (また、明白な理由として、奇妙さについて適切な説明を書けない場合、その奇妙さはあなたほど正当化されません)。と思っていた)。一部のジュニア開発者のコ​​メントは、前者を実際のコードで実行していると示唆しているかもしれませんが、実際には問題の機能を知っている人にとって明らかなことを説明するための例のコメント - 私たちはそれらに慣れていないため、それが例を読んでいる理由です.

変更可能な参照型を使用すると、2 番目のバージョンの方が実際にはより賢明であり、率直に言ってより良い例ですが、著者はおそらく、私たちが受けているものとは異なる精神的プレッシャーであるさらに別の機能のさらに別の例について考えようとしていたのでしょう。実際のコードを書くときの下。いくつかの点で反対です (チュートリアルの作成者は、それらを説明するためにすべての機能を使用する必要がありますが、エキゾチックなものよりもよく知られているものを優先したいと考えています)。

于 2012-09-03T10:21:10.583 に答える