2010-08-09 62 views
0

可能重複:
How to copy value from class X to class Y with the same property name in c#?具有相同屬性的轉換C#對象

C#4.0

如果我有POCO的N個具有相同屬性(相同的名稱的對象和類型) 我想將它們轉換爲另一個。他們沒有任何父母關係,只是POCO。

我可以輸入轉換後的函數來從一個到另一個複製只是屬性值:

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

但是這樣做很無聊,特別是在我有很多對象屬性的例子中。 有人可能會建議更聰明的做法嗎?

+1

將它們投射到'dynamic'。 – Steven 2010-08-09 07:01:23

回答

1

可以使用反射:

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); 
} 

然而,反思是非常慢得多,不是代碼。如果您需要良好的性能,您可以查看Fasterflect項目,該項目從反射信息動態生成IL代碼。

2

您可以使用反射像第三文化孩子desribes它,或者你可以使用AutoMapper

http://automapper.codeplex.com/

隨着AutoMapper你有一個易於使用的映射。這是基於公約。如果你需要它們,你也可以做更復雜的事情。看例子。

相關問題