DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Dictionary型を参照渡しを代入にするには

環境/言語:[.NET Framework 3.5 C#]
分類:[.NET]

Dictionary型の変数を別の同じ型の変数に入れると元の変数の値まで更新されます。
これを参照渡しというものですよね?これを代入するだけにすることはできない
でしょうか?

public partial class Form1:Form {

Dictionary<int,Dictionary<string,string>> testArray = new Dictionary<int,Dictionary<string,string>>();
Dictionary<int,Dictionary<string,string>> testArray2 = new Dictionary<int,Dictionary<string,string>>();

public Form1() {
InitializeComponent();

testArray2 = testArray;

Dictionary<string,string> d = new Dictionary<string,string>();
d.Add("111","222");

testArray2.Add(999,d);
}

}

よろしくお願いします。
■No27437に返信(たなさんの記事)
> これを参照渡しというものですよね?これを代入するだけにすることはできない
> でしょうか?

この場合、代入ではなくコピーを作るという意味になりますね。
ただ、どこまでのコピーなのかは考える必要があります。


次のように書くと、testarray と testarray2 の実体は別になります。
testarray2 = new Dictionary<int,Dictionary<string,string>>(testarray);

ただし、testarray2[あるキー].Add("test", "test"); と実行すると、testarray[あるキー] にも追加されます。
あくまで、一層しかコピーされていないのです。

完全なコピーを求めるなら deep copy として参照の中の参照も別の実体を作っていく作業が必要になります。
(勝手にはやってくれないので、そういったコードを書かなければならない)
Azuleanさん 

返信していただきありがとうございます。

> 次のように書くと、testarray と testarray2 の実体は別になります。
> testarray2 = new Dictionary<int,Dictionary<string,string>>(testarray);

実現したかったことができました。すごく勉強になりました。
どうもありがとうございます!
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板