¿Cómo creo una copia de un objeto de clase sin ninguna referencia? ICloneable
hace una copia de un objeto de clase (mediante una copia superficial) pero no admite la copia en profundidad. Estoy buscando una función que sea lo suficientemente inteligente como para leer todos los miembros de un objeto de clase y hacer una copia profunda a otro objeto sin especificar los nombres de los miembros.¿Cómo crear una copia del objeto de clase sin ninguna referencia?
5
A
Respuesta
4
que he visto esto como una solución, básicamente escribir su propia función para hacer esto ya que lo que ha dicho sobre ICloneable no hacer una copia profunda
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);
}
}
Estoy referencia a este hilo. 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;
}
Se puede ajustar a sus necesidades. Por ejemplo,
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
¿Es esto de alguna manera recursivo que no puedo ver claramente? –
Cuestiones relacionadas
- 1. ¿Cómo hacer una copia de un objeto sin referencia?
- 2. ¿Cómo crear una copia del mismo objeto con una referencia diferente?
- 3. Crear una copia de un objeto NSObject
- 4. Seleccionar elementos sin ninguna clase
- 5. Llamar a una función del archivo de clase sin crear el objeto de esa clase
- 6. ¿Se puede crear un objeto de selección sin ninguna interacción del usuario?
- 7. Copia profunda de una instancia de clase .NET sin serialización
- 8. Crear un objeto sin llamar a una clase
- 9. ¿Es posible crear un objeto sin declarar una clase?
- 10. Crear nuevo objeto EF con referencia de clave externa sin cargar todo el objeto de referencia
- 11. JavaScript obteniendo una clase de elementos sin ninguna biblioteca
- 12. std :: vector inserta una copia o referencia de un objeto?
- 13. Devolviendo una copia del auto de un objeto en C++
- 14. Crear una referencia débil a un objeto
- 15. Crear referencia al nuevo objeto
- 16. Impedir la copia al inicializar un objeto no const desde una referencia de referencia
- 17. ¿Cómo puedo crear un objeto Delphi a partir de una referencia de clase y asegurar la ejecución del constructor?
- 18. ¿Cómo crear un zócalo RFCOMM de Android sin ninguna entrada del usuario?
- 19. Copia C# objeto a lo largo con referencia
- 20. ¿Cómo devolver un objeto de clase por referencia en C++?
- 21. instanciar clase del objeto de clase
- 22. C++ devolución de una copia objeto
- 23. C# Referencia del objeto no establecida en una instancia de un objeto. ¿Instanciando clase dentro de una lista?
- 24. Devolviendo una referencia constante a un objeto en lugar de una copia
- 25. Copia del identificador de objeto y la referencia del identificador de objeto: ¿cuál debería usarse en la aplicación real?
- 26. Cómo crear una nueva instancia de clonación del objeto PSObject
- 27. Crear una copia profunda en C#
- 28. crear una nueva instancia de una clase sin operador "nuevo"
- 29. Cómo copiar la base de datos del servidor sql de uno a otro servidor sin ninguna copia de seguridad
- 30. ¿Cuándo se copia un valor/objeto C# y cuándo se copia su referencia?
posible duplicado de [Graph objeto entero Clone] (http://stackoverflow.com/questions/2417023/clone-whole-object-graph) – xanatos
rápida y La solución sucia es serializar el objeto e inmediatamente deserializarlo a otro objeto. Por supuesto, eso depende de si el objeto puede ser serializado adecuadamente ... – canon