J'ai Comment puis-je copier A à un autre A? En C ++, je sais que je pouvais faire Je envisage de changer A à une structure nullable. P> Étape 2 Je dois faire p> et copier les données de base de b à c. p> p> p> * A1 = * A2; code>. Y a-t-il quelque chose de similaire dans C #? Je sais que je pouvais écrire une solution générique à l'aide de la réflexion, mais j'espère que quelque chose existe déjà. P>
8 Réponses :
En supposant que A est juste une classe simple, vous pouvez faire
A newA = instanceOfA.MemberwiseClone();
Bien que cela ne puisse être aussi rapide qu'une approche non-réflexion.
D'accord. Il peut être plus pratique et plus évolutif qu'une approche personnalisée cependant.
Il y a l'interface iClonable code> qui offre une méthode code> clone () code>. p>
Vous pouvez cloner, vous pouvez définir un constructeur de copie. Pourquoi changer la classe en structure juste parce que dans C ++, vous pouvez faire quelque chose en 10 caractères. C # est différent. Les structures ont des avantages et des inconvénients. P>
Ajoutez les constructeurs appropriés:
class Foo
{
public Foo(int a, string b)
{
A = a;
B = b;
}
public Foo(Foo other)
{
A = other.A;
B = other.B;
}
public int A { get; set; }
public string B { get; set; }
}
+1 Si j'avais suffisamment de votes aujourd'hui. Immutable n'impliquerait aucune propriété définie, non?
@LPTHNC: Set privé code> le ferait.
Merci. Comment allez-vous déclarer que si vous voulez continuer à obtenir comme public - sur la même ligne ou séparément?
@Ipthnc: public int a {obtenir; ensemble privé; }
J'ai utilisé la sérialisation binaire. Fondamentalement, sérialisez l'instance à un flux de mémoire. Ensuite, désérialisez-le hors du flux de mémoire. Vous aurez une copie binaire exacte. Ce sera une copie profonde, plutôt qu'une copie peu profonde. pour une copie peu profonde, vous pouvez utiliser objet.memberwiseclone code> p> p> p> p> p> p> P> P>
+1 pour cette méthode. Nous avons utilisé cela plusieurs fois et cela fonctionne bien.
Il ressemble à un objet.MemberWiseclone fonctionne uniquement avec les deux classes sont les mêmes et dans la méthode de la classe? Comment puis-je programmer MyserializationMethod? Il semble que je vais utiliser la réflexion.
Quelqu'un l'a posté ci-dessous: C-Sharpcorner.com/uploadfile/sd_surajit/cloning0503200701262 0 am/... aucune réflexion nécessaire
Voici ce que quelqu'un a déjà fait ... p>
Copie profonde en C # (Clonage pour une classe définie par l'utilisateur) < / a> p>
Voici un code simple qui fonctionne sur n'importe quelle classe, pas seulement de base.
Nous avons utilisé ce code avec succès:
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace Utility {
internal static class ObjectCloner {
public static T Clone<T>(T obj) {
using (MemoryStream buffer = new MemoryStream()) {
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(buffer, obj);
buffer.Position = 0;
T temp = (T)formatter.Deserialize(buffer);
return temp;
}
}
}
}
Vous avez déjà demandé ici ici: PMichaels.net/2016/03/04/...