Listの中身をまるっとコピーする
Listの中身をまるっと別のリストにコピーしたいとき、単純にリストを代入すると参照渡しになってしまいます。
これが配列だと、CopyTo メソッドを使ってやればいいのですが、Listだと同じものがありません。
下の例ではlist1を代入したlist2に追加した内容が、list1にも反映されています。
var list1 = new List<string>();
list1.Add("1");
var list2 = list1;
list2.Add("2");
Console.WriteLine(string.Join(",", list1)); // 1,2
Console.WriteLine(string.Join(",", list2)); // 1,2
Listの中身を値渡しでコピーする方法
ではどのようにListの中身をコピーするのでしょうか。一番単純なのがおそらくListのコンストラクタを使う方法です。
var list1 = new List<string>();
list1.Add("1");
// コンストラクタの引数に複製したいListを渡す
var list2 = new List<string>(list1);
list2.Add("2");
Console.WriteLine(string.Join(",", list1)); // 1
Console.WriteLine(string.Join(",", list2)); // 1,2
上の例ではListのコンストラクタに複製したListを渡しています。
これでリストの中身のみを複製することができます。
別のオブジェクトとして作成されるので、list2に追加された内容はlist1に影響を与えません。
ちなみにVB.NETのコードでは次のようにコンストラクタに渡します。
Dim list2 As List(Of String) = New List(Of String)(list1)
コメントを書く