通过反射复制对象值

时间:2012-10-29 11:28:55

标签: c# asp.net-mvc-3 reflection

我编写了一个类,用于将属性从一个对象复制到另一个对象,但是我遇到了异常: System.Reflection.TargetException:对象与目标类型不匹配。 我检查过, fromPropValue 是正确的类型,不是null等。 当然,接收者的财产是二元。

public class Reflector
{
    public void ReflectProperties(object from, object to) 
    { 
        Type toType = to.GetType();
        Type fromType = from.GetType();
        var toProperties = toType.GetProperties();

        foreach (var prop in toProperties)
        {
            var fromProp = fromType.GetProperty(prop.Name);

            if (fromProp != null)
            {
                var propType = prop.PropertyType;
                var fromPropValue = fromProp.GetValue(from, null);

                if (propType == typeof(Binary))
                    prop.SetValue(this, (Binary)fromPropValue, null); // <-- error
                else if (propType == typeof(string))
                    prop.SetValue(this, (string)fromPropValue, null);
                else if (propType == typeof(bool))
                    prop.SetValue(this, (bool)fromPropValue, null);
            }
        }
    }
}

P.S。:来自的对象是对象的父对象,我只想将所有属性的值从父级复制到子级。

1 个答案:

答案 0 :(得分:2)

我认为你想要prop.SetValue(to, ...而不是prop.SetValue(this, ...

此外,您不需要if语句和演员表。你可以prop.SetValue(to, fromPropValue, null);