映射对象属性,不包括类型

时间:2012-01-16 18:43:11

标签: c# asp.net

我目前使用的是什么

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 个答案:

答案 0 :(得分: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);
        }
     }
}