Maison >développement back-end >Tutoriel C#.Net >Une brève discussion sur le problème de copie approfondie des objets List en C#

Une brève discussion sur le problème de copie approfondie des objets List en C#

高洛峰
高洛峰original
2017-01-19 13:09:481491parcourir

1. Lorsque T dans l'objet List8742468051c85b06f0a0af9e3e506b5c est un type valeur (type int, etc.)

Pour une Liste de types valeurs, vous pouvez la copier directement en utilisant la méthode suivante :

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

2. Lorsque T dans l'objet List8742468051c85b06f0a0af9e3e506b5c est un type de référence (comme une classe d'entité personnalisée)

1. copié en utilisant la méthode ci-dessus. Seules les références aux objets de la liste seront copiées. Vous pouvez utiliser les méthodes d'extension suivantes pour copier :

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接口
 }

2. Une autre façon de compléter. une copie complète de l'objet de référence se fait par sérialisation. C'est la méthode la plus fiable

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

3, Utiliser le système. 🎜>Le test est le suivant :

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

L'article ci-dessus aborde brièvement le problème de copie profonde des objets List en C#. J'espère que c'est le cas. Je peux vous donner une référence. J'espère également que tout le monde soutiendra le site Web PHP chinois.

Pour plus d'articles sur le problème de copie profonde des objets List8742468051c85b06f0a0af9e3e506b5c en C#, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn