2010-08-09 4 views
0

Possible en double:
How to copy value from class X to class Y with the same property name in c#?C# objets avec les mêmes propriétés conversion

C# 4.0

Si j'ai nombre N Poco objets ayant les mêmes propriétés (les mêmes noms et types) Je veux les convertir l'un à l'autre. Ils n'ont pas de relations avec les parents, le juste POCO.

je taper la fonction convertie de copier uniquement les propriétés des valeurs d'un à l'autre:

obj1.a = obj1.a; obj2.a = obj2.a; ...

mais c'est très ennuyeux de le faire et surtout dans les exemples où j'ai beaucoup de propriétés dans les objets. Mai par quelqu'un peut suggérer une façon plus intelligente de le faire?

+1

Convertissez-les en 'dynamic'. – Steven

Répondre

1

Vous pouvez utiliser la réflexion:

object obj1 = GetObject(1); 
object obj2 = GetObject(2); 

Type type1 = obj1.GetType(); 
Type type2 = obj2.GetType(); 

var properties = (from p1 in type1.GetProperties(BindingFlags.Instance | BindingFlags.Public) 
        where p1.CanRead && p1.CanWrite 
        from p2 in type2.GetProperties(BindingFlags.Instance | BindingFlags.Public) 
        where p2.CanRead && p2.CanWrite 
        where p1.Name == p2.Name && p1.PropertyType = p2.PropertyType 
        select new { Property1 = p1, Property2 = p2 }).ToList(); 

foreach(var props in properties) { 
    object value1 = props.Property1.GetValue(obj1, null); 
    props.Property2.SetValue(obj2, value1, null); 
} 

Cependant, la réflexion est beaucoup plus lent, que le code. Si vous avez besoin de bonnes performances, vous pouvez regarder le projet Fasterflect, qui génère dynamiquement du code IL à partir d'infos de réflexion.

2

Vous pouvez utiliser la réflexion comme TCKS desribes, ou vous pouvez utiliser AutoMapper

http://automapper.codeplex.com/

Avec AutoMapper vous avez un outil facile à utiliser Mapper. Ce qui est basé sur la Convention. Vous pouvez également faire des choses plus complexes si vous en avez besoin. Voir les exemples.

Questions connexes