属性未设置反射

时间:2015-06-29 13:23:10

标签: c# linq reflection

我遇到过这种奇怪的情况。我有以下型号:

public class MyClass
{
    public MyClass(AnotherClassBase myProp)
    {
        MyProp = myProp;
    }

            private AnotherClassBase _MyProp;
    public virtual AnotherClassBase MyProp 
    {
        get
        {
            return _MyProp;
        }
        set
        {
            _MyProp = value;
            DoStuff();
        }
    }
}

我最初使用构造函数实例化它:

 var myInstance = new MyClass(new AnotherClassConcrete1());

然后尝试使用此扩展方法使用AnotherClassConcrete2类型的某个实例更改属性值:

public static void Set<T>(this T target, Expression<Func<T, object>> memberLamda, object value)
    {
        var memberSelectorExpression = memberLamda.Body as MemberExpression;
        if (memberSelectorExpression != null)
        {
            var property = memberSelectorExpression.Member as PropertyInfo;
            if (property != null)
            {
                property.SetValue(target, value, null);
            }
        }
    }

在调试器检查器中,我可以看到值已正确更改。但是,以下内容返回false:

myInstance.MyProp is AnotherClassConcrete2

以下内容返回true:

myInstance.MyProp is AnotherClassConcrete1

为什么?我该如何解决这个问题?

0 个答案:

没有答案