2012-01-16 53 views
0

我目前使用映射對象的屬性,但不包括各類

public static void MapObjectPropertyValues(object e1, object e2) 
    { 
     foreach (var p in e1.GetType().GetProperties()) 
     { 
      if (e2.GetType().GetProperty(p.Name) != null) 
      { 
       p.SetValue(e1, e2.GetType().GetProperty(p.Name).GetValue(e2, null), null); 
      } 

     } 
    } 

我想傳遞一個第三個參數,那我想從映射排除類型泛型列表。例如字符串和布爾值。並檢查p是否在列表中。任何幫助表示讚賞,謝謝!

回答

1

如果類型完全匹配,則可以使用p.PropertyType屬性排除分配。

public static void MapObjectPropertyValues(object e1, 
        object e2, 
        IEnumerable<Type> excludedTypes) 
{ 
    foreach (var p in e1.GetType().GetProperties()) 
    { 
     if (e2.GetType().GetProperty(p.Name) != null && 
     // next line added 
     !(excludedTypes.Contains(p.PropertyType))) 
     { 
      p.SetValue(e1, e2.GetType().GetProperty(p.Name).GetValue(e2, null), null); 
     } 
    } 
} 
+0

謝謝,請您在調用方法時提供示例嗎?我以前從未使用過IEnumerable,但我想它與通用列表類似? – Johan 2012-01-16 19:03:41

+0

IEnumerable 是接口列表實現之一,這意味着您可以簡單地提供一個List 作爲參數。 (該參數還將接受不是列表的枚舉對象,如數組和集合。) – drf 2012-01-16 19:10:30

+0

我嘗試添加'bool'和'Boolean',但它們都不起作用。在這種情況下,bool的等價性是什麼? – Johan 2012-01-16 19:14:13

相關問題