Come si crea una copia di un oggetto di classe senza alcun riferimento? ICloneable
crea una copia di un oggetto di classe (tramite una copia superficiale) ma non supporta la copia profonda. Sto cercando una funzione che sia abbastanza intelligente da leggere tutti i membri di un oggetto di classe e fare una copia profonda su un altro oggetto senza specificare i nomi dei membri.Come creare una copia dell'oggetto di classe senza alcun riferimento?
5
A
risposta
4
Ho visto questo come una soluzione, in fondo scrivere la propria funzione per fare questo in quanto quello che hai detto riguardo ICloneable non fare una copia profonda
public static T DeepCopy(T other)
{
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, other);
ms.Position = 0;
return (T)formatter.Deserialize(ms);
}
}
sto riferimento a questo thread. copy a class, C#
0
public static object Clone(object obj)
{
object new_obj = Activator.CreateInstance(obj.GetType());
foreach (PropertyInfo pi in obj.GetType().GetProperties())
{
if (pi.CanRead && pi.CanWrite && pi.PropertyType.IsSerializable)
{
pi.SetValue(new_obj, pi.GetValue(obj, null), null);
}
}
return new_obj;
}
È possibile regolare alle vostre esigenze. Ad esempio,
if (pi.CanRead && pi.CanWrite &&
(pi.PropertyType == typeof(string) ||
pi.PropertyType == typeof(int) ||
pi.PropertyType == typeof(bool))
)
{
pi.SetValue(new_obj, pi.GetValue(obj, null), null);
}
O
if (pi.CanRead && pi.CanWrite &&
(pi.PropertyType.IsEnum || pi.PropertyType.IsArray))
{
...;
}
+0
È in qualche modo ricorsivo in modo che non riesco a vedere chiaramente? –
Problemi correlati
- 1. Come creare una copia di un oggetto senza riferimento?
- 2. Come copia completa una classe senza la marcatura come Serializable
- 3. Come creare una chat web P2P senza alcun server?
- 4. Come posso creare una copia di BufferedReader?
- 5. Come creare manualmente una copia profonda
- 6. Classe astratta senza alcun metodo astratto
- 7. costruttore di copia: una copia profonda di una classe astratta
- 8. Creare un oggetto senza chiamare una classe
- 9. Come licenziare programmaticamente UIAlertController senza alcun pulsante?
- 10. Come creare una copia di una funzione python
- 11. classe rubino di riferimento senza nome modulo
- 12. Come posso creare una copia dell'oggetto java.util.Properties?
- 13. Copia una classe in un'altra?
- 14. PHP: creazione di una copia di una variabile di riferimento
- 15. Come importare il modulo senza creare copia in Android Studio
- 16. creare una copia di array multi-dimensionale, non fare riferimento - JavaScript
- 17. Creare una copia di un UIView in Swift
- 18. Come creare una copia senza distinzione tra maiuscole e minuscole di un campo stringa in SOLR?
- 19. Test di PHP Chiusura senza riferimento alla classe interna Chiusura
- 20. Creare una classe un'istanza di un'altra classe
- 21. Come creare una copia superficiale di un elenco in Python
- 22. Come posso creare una copia duplicata esatta di un array?
- 23. Riferimento a una classe anonima?
- 24. Android BroadcastReceiver senza alcun intento filtro
- 25. Come chiamo + metodi di classe nell'obiettivo C senza fare riferimento alla classe?
- 26. Che cos'è una classe di valore e cos'è una classe di riferimento in C#?
- 27. Come attraversare Request.Form senza conoscere alcun dettaglio?
- 28. Come creare test QUnit con riferimento ad un'altra classe?
- 29. Come creare il pulsante "Copia"?
- 30. È possibile creare un oggetto senza una classe in C#?
possibile duplicato del [Clone intero grafico Object] (http://stackoverflow.com/questions/2417023/clone-whole-object-graph) – xanatos
e veloce soluzione sporca è serializzare l'oggetto e deselezionarlo immediatamente in un altro oggetto. Ovviamente ciò dipende dal fatto che l'oggetto possa essere serializzato correttamente ... – canon