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

高洛峰
リリース: 2017-01-19 13:09:48
オリジナル
1393 人が閲覧しました

1. List オブジェクトの T が値型 (int 型など) の場合、次のメソッドで直接コピーできます。 List 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# の List オブジェクトのディープ コピーの問題に関するその他の記事については、PHP 中国語 Web サイトに注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!