web-dev-qa-db-ja.com

.NET:ディクショナリ値は参照または値によって格納されていますか

Dictionary<int, Product>。同じ製品が複数のキーに追加された場合、そのオブジェクトの新しいインスタンスが各キーに保存されますか?または、元のオブジェクトへの参照だけですか?

このコレクションは非常に大きく、各製品には1〜10個のキーがあります。私の主な関心事はメモリの割り当てです。

22
NSjonas

Productが参照型(構造体ではなくクラス)の場合、参照のみが保存されます。

31
zmbq

いいえ、元のオブジェクトへの同じ参照を使用する必要があります。

ただし、Dictionaryがシリアル化/非シリアル化された場合の動作は完全にはわかりません。

4
Chris Doggett

Dictionaryは、渡したキーの値のコピーをストーリー化します。コンテナが格納しようとした変数よりも長く存続する可能性があるため、任意の値への参照を格納することはできません。さて、他の人が言ったように、値の型が参照型である場合、変数の値は単なる参照なので、変数への参照のコピーを格納するだけです。辞書の値のタイプが値タイプの場合、実際の値がコピーされます。

3
Servy

参照タイプは常に参照として保存されます。あなたがあなたのタイプにどんな「クローン」ロジックを意図しているのか誰も推測するつもりはありません。コピーが必要な場合は、コンテナーに配置したり、他の関数に渡したりする前に、自分でコピーを作成する必要があります。

関数への参照として渡されない限り、値型がコピーされます(単純にバイト表現のコピーが作成されますが、すべての参照値は引き続き参照されます)。コンテナの場合はコピーになります。それらの参照型ラッパーを作成しない限り。

0
aiodintsov