我遇到过这种奇怪的情况。我有以下型号:
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
为什么?我该如何解决这个问题?