ホームページ >バックエンド開発 >C++ >C# の ToList() はリストの要素の深いコピーまたは浅いコピーを作成しますか?

C# の ToList() はリストの要素の深いコピーまたは浅いコピーを作成しますか?

DDD
DDDオリジナル
2025-01-04 00:28:39695ブラウズ

Does C#'s ToList() Create a Deep Copy or a Shallow Copy of the List's Elements?

ToList(): 新しいリストは作成されますか?

C# では、ToList() は新しいリストを作成するメソッドです。既存のリストからの要素のコピー。クラスなどの参照型の場合、コピーには元のオブジェクトと同じオブジェクトへの参照が含まれています。

次のコードを考えてみましょう。

public class MyObject
{
    public int SimpleInt { get; set; }
}
...
var objs = new List<MyObject>() { new MyObject() { SimpleInt = 0 } };
var whatInt = ChangeToList(objs);

public int ChangeToList(List<MyObject> objects)
{
    var objectList = objects.ToList();
    objectList[0].SimpleInt = 5;
    return objects[0].SimpleInt;
}

このコードでは、ChangeToList メソッドはMyObject オブジェクトのリストを取得し、ToList() を使用して新しいリストに変換します。次に、新しいリストの最初のオブジェクトの SimpleInt プロパティを変更します。

ここで注意すべき重要な点は、MyObject が参照型であるということです。したがって、ToList() 操作は新しいリストを作成しますが、新しいリスト内の要素は元のリスト内の同じオブジェクトへの参照です。したがって、新しいリストで参照されるオブジェクトの SimpleInt プロパティが変更されると、その変更は元のリストの対応するオブジェクトにも反映されます。新しいリストで行われた変更が元のリストに反映されるため、RunChangeList() メソッドの出力が 5 になるのはこのためです。

以上がC# の ToList() はリストの要素の深いコピーまたは浅いコピーを作成しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。