2012-01-16 89 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

相关问题