[C#] Listの中身を複製(値渡しでコピー) [VB.NET]

[C#] Listの中身を複製(値渡しでコピー) [VB.NET]

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)

C#カテゴリの最新記事