0

.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 のディープ コピーを実行できるということはありますか? これは単なるテストクラスです。私の仕事では、より大きくなっています。

どうもありがとうございました。

4

3 に答える 3