Listのコピーを模索してます。
(浅いコピーと深いコピー)
最後のlist1をコピーするのですが、最後のClear()メソッドで
コピー先に影響が受けないようなコピーを行います。
List<string> list1 = new List<string>();
list1.Add(111);
list1.Add(222);
List<string> list2;
list2 = list1;
string[] list3 = list2.ToArray();
List<string> list4 = new List<string>();
foreach (string str in list1)
{
list4.Add(str);
}
list1.Clear();
list2は、Clearされてしまうので×
list3は、配列に変換されている。
list4は、foreachでぐるぐるまわす手間がある。
JavaだとListのコピーは、clone()メソッドで一発ですが
.NETでは、list3かlist4の方法でしょうか?
シャローコピー と ディープコピーのことですね。
とりあえず、
>string[] list3 = list2.ToArray();
ではなく
List<string> list3 = new List<string>(list2.ToArray());
ですかね。(未確認)
>List<string> list3 = new List<string>(list2.ToArray());
これ確認しました。
これが、ベストっぽいですね。1行で書けるし。Listは、コンストラクタに配列を取れる
んですね。
これでいこうと思います。ありがとうございます。
解決されていますが……
> List<string> list3 = new List<string>(list2.ToArray());
List<string> list3 = new List<string>(list2);
でよいかと。
どちらにしても,IEnumerable<T> collectionを引数に取るコンストラクタを使うわけで
すし。
>List<string> list3 = new List<string>(list2);
さらにベストがありましたね。
コンストラクタの引数には、IEnumerable<T>を実装しているものならいいんですね。
コードは短かくて、単純なほどいいです。ありがとうございます。