ホームページ >バックエンド開発 >C#.Net チュートリアル >C#でコピーとディープコピーを実装する方法を詳しく解説
以下のエディターは、C#コピーとディープコピーの実装方法に関する記事をお届けします。編集者はこれが非常に良いものだと思ったので、皆さんの参考として今から共有します。エディターに従って見てみましょう。ディープ コピーとシャロー コピーの違いは、シャロー コピーは値型の値のみをコピーし、インスタンスに含まれる
オブジェクト1. List8742468051c85b06f0a0af9e3e506b5c オブジェクトの T が値型 (int 型など) の場合 値型のリストの場合、それをコピーできます次のメソッドを直接使用します:
List<T> oldList = new List<T>(); oldList.Add(..); List<T> newList = new List<T>(oldList);
2. List8742468051c85b06f0a0af9e3e506b5c オブジェクトの T が参照型である場合 (カスタム エンティティ クラスなど)1. 上記の方法を使用して参照型のリストをコピーすることはできません。メソッドの場合、リストのみがコピーされます。 内のオブジェクトへの参照は、次の拡張メソッドを使用してコピーできます。
static class Extensions { public static IList<T> Clone<T>(this IList<T> listToClone) where T: ICloneable { return listToClone.Select(item => (T)item.Clone()).ToList(); } //<SPAN style="COLOR: #000000">当然前题是List中的对象要实现ICloneable接口</SPAN> }
2. 参照されたオブジェクトをディープ コピーする別の方法は、
public static T Clone<T>(T RealObject) { using (Stream objectStream = new MemoryStream()) { //利用 System.Runtime.Serialization序列化与反序列化完成引用对象的复制 IFormatter formatter = new BinaryFormatter(); formatter.Serialize(objectStream, RealObject); objectStream.Seek(0, SeekOrigin.Begin); return (T)formatter.Deserialize(objectStream); } }
を使用する方法です。 System.
Xml.Serialization シリアル化と逆シリアル化を実現するにはpublic static T Clone<T>(T RealObject)
{
using(Stream stream=new MemoryStream())
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
serializer.Serialize(stream, RealObject);
stream.Seek(0, SeekOrigin.Begin);
return (T)serializer.Deserialize(stream);
}
}
以上がC#でコピーとディープコピーを実装する方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。