3

リストコンストラクターのパラメーターとしてリストオブジェクトを指定して、1つのリストを別のリストにコピーできることを私は知っています。

そうすることで、使用される型が単純な組み込みである場合にディープ コピーを作成できます (具体的にはどれですか? )。タイプstringの例:

List<string> testList = new List<string>();

List<string> testListCopy = new List<string>(testList );

ネストされたリストを操作する場合、ディープ コピーを作成できますか? :

List<List<string>> testList = new List<List<string>>();

List<List<string>> testListCopy = new List<List<string>>(testList );
4

2 に答える 2

1

コピーは浅いとか深いだけではありません。これは、「最も深い」オプションと「最も浅い」オプションを備えた複数の値を持つスケールです。リストのコピー コンストラクターを使用するだけでは、中間のどこかにコピーが作成されます。「ディープコピー」ではありません。

あなたがしているのは、参照をコピーせずに新しいリストを再作成することですが、そのリスト内のアイテムに対して浅いコピーを実行しています。その内部リスト内の項目自体がリストである場合、または他の変更可能な参照型である場合は、それらのディープ コピー、およびそれらのすべての参照フィールドなどをチェーンのずっと下にコピーする必要があります。それは本当に「深い」コピーになります。そうすることは自明ではなく、一般的なケースでは不可能です。public static T DeepCopy<T>(T object)どの型でも機能するように実装を作成する真に効果的な方法はありません。(シリアライゼーションを利用することで近づくことができますが、すべてのオブジェクトをシリアライズできるわけではありません)。

a の特定のケースに関してはList<List<string>>、新しい外部リストと、各内部リストの新しいリストを作成するだけです。Pswg は、この特定の問題に対して適切な回答を提供しています。

List<List<string>> listCopy = list.Select(x => x.ToList()).ToList();
于 2013-04-17T19:42:41.803 に答える