Saltar al contenido

fusionando dos objetos en C#

Esta es la solución más completa que te podemos brindar, pero primero estúdiala pausadamente y valora si es compatible a tu proyecto.

Solución:

Actualizar
Use AutoMapper en su lugar si necesita invocar mucho este método. Automapper construye métodos dinámicos usando Reflection.Emit y será mucho más rápido que la reflexión.’

Podrías copiar los valores de las propiedades usando la reflexión:

public void CopyValues(T target, T source)

    Type t = typeof(T);

    var properties = t.GetProperties().Where(prop => prop.CanRead && prop.CanWrite);

    foreach (var prop in properties)
    
        var value = prop.GetValue(source, null);
        if (value != null)
             prop.SetValue(target, value, null);
    

Lo he hecho genérico para garantizar la seguridad de los tipos. Si desea incluir propiedades privadas, debe usar una anulación de Type.GetProperties(), especificando indicadores de vinculación.

He intentado Fusionar dos objetos en un tipo anónimo de Kyle Finley y funciona perfectamente.

Con el TypeMerger la fusión es tan simple como

var obj1 = new foo = "foo";

var obj2 = new bar = "bar";

var mergedObject = TypeMerger.MergeTypes(obj1 , obj2 );

Eso es todo, obtuviste el objeto fusionado, aparte de eso, también hay una disposición para ignorar propiedades específicas. También puede usar lo mismo para MVC3.

Puede hacerlo usando la reflexión, pero como alguien dijo, tendrá una penalización de rendimiento.

Dado que está trabajando con un diseño de clase esperado, puede lograr el mismo objetivo utilizando un método de extensión como este:

public static class MyClassExtensions
{
    public static void Merge(this MyClass instanceA, MyClass instanceB)
    
        if(instanceA != null && instanceB != null)
        
             if(instanceB.Prop1 != null) 
             
                 instanceA.Prop1 = instanceB.Prop1;
             


             if(instanceB.PropN != null) 
             
                 instanceA.PropN = instanceB.PropN;
             
    

Y más tarde, en algún lugar de su código:

someInstanceOfMyClass.Merge(someOtherInstanceOfMyClass);

Al final del día, ha centralizado esta operación en un método de extensión y si agrega o elimina una propiedad de su clase, solo necesita modificar la implementación del método de extensión y lo hará todo.

Sección de Reseñas y Valoraciones

Eres capaz de añadir valor a nuestra información aportando tu experiencia en las anotaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *