ホームページ  >  記事  >  バックエンド開発  >  C# における List オブジェクトのディープ コピーの問題に関する簡単な説明

C# における List オブジェクトのディープ コピーの問題に関する簡単な説明

高洛峰
高洛峰オリジナル
2017-01-19 13:09:481394ブラウズ

1. List8742468051c85b06f0a0af9e3e506b5c オブジェクトの T が値型 (int 型など) の場合、次のメソッドで直接コピーできます。 List8742468051c85b06f0a0af9e3e506b5c T が参照型 (カスタム エンティティ クラスなど) の場合

1. 上記のメソッドを使用してコピーできるのは、List 内のオブジェクトへの参照のみです。次の拡張メソッドを使用してコピーします。

List<T> oldList = new List<T>();
oldList.Add(..);
List<T> newList = new List<T>(oldList);

2. シリアル化を使用して参照オブジェクトのディープ コピーを完了する別の方法は、最も信頼性の高い方法です。

static class Extensions
 {
     public static IList<T> Clone<T>(this IList<T> listToClone) where T: ICloneable
     {
         return listToClone.Select(item => (T)item.Clone()).ToList();
     }
 //当然前题是List中的对象要实现ICloneable接口
 }

3. ディープ システムをテストします。上記のオブジェクトのコピー

テストは次のとおりです:

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);
   }
}

上記の記事では、C# の List オブジェクトのディープ コピーの問題について簡単に説明していますが、エディターによって共有されるすべての内容です。参考になれば幸いです。また、皆さんも PHP 中国語 Web サイトをサポートしていただければ幸いです。

C# の List8742468051c85b06f0a0af9e3e506b5c オブジェクトのディープ コピーの問題に関するその他の記事については、PHP 中国語 Web サイトに注目してください。

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