.ToArray() を使用して List のディープ コピーを含む配列を作成しようとすると、問題が発生します。
ここに私のテストクラスがあります:
public class MyClass
{
public Color Color1;
public MyClass(Color color)
{
this.Color1 = color;
}
}
リストのToArray()を実行するために使用するコードは次のとおりです
List<MyClass> listColors = new List<MyClass>();
listColors.Add(new MyClass(Color.Blue));
listColors.Add(new MyClass(Color.Green));
listColors.Add(new MyClass(Color.Red));
MyClass[] arrayColors = listColors.ToArray();
arrayColors[2].Color1 = Color.Purple;
Console.WriteLine(arrayColors[2].Color1.ToString());
Console.WriteLine(listColors[2].Color1.ToString());
結果:
Color [Purple]
Color [Purple]
ご覧のとおり、配列 MyClass を .ToArray() メソッドで作成し、この配列の 3 番目の要素を変更しましたが、リスト listColors も変更される理由がわかりません。
このサンプルは、.NET 2.0 を搭載した Windows XP で実行します。
このサンプルを Windows 7 で実行しようとしましたが、結果は次のとおりです。
Color [Purple]
Color [Red]
これは .NET フレームワークの問題だと思います。
とにかく、.NET 2.0 で .NET 4 のように List のディープ コピーを実行できるということはありますか? これは単なるテストクラスです。私の仕事では、より大きくなっています。
どうもありがとうございました。