我对PropertyInfo.CanRead/Write的工作原理有点困惑。
我在一个类上有一个特殊的属性,其中CanRead返回true,CanWrite返回false。但是,如果我尝试对此属性执行property.GetValue(myObject,null),则会收到异常消息"Exception已由调用的目标抛出“。
如果我能够读取这个属性,为什么GetValue()会失败呢?
非常感谢。
发布于 2009-11-24 21:48:56
从本质上讲,你想做的事情是正确的。
public class Test {
public string Prop { get; private set; }
public Test() {
Prop = "abc";
}
}
....
Test t = new Test();
var pi = t.GetType().GetProperty("Prop");
if(pi.CanRead) {
Console.WriteLine(pi.GetValue(t, null));
}但是既然你得到了一个异常,那就说明出了其他问题。会不会是你的实例,myObject实际上是空的?除此之外,很可能是在属性getter内部发生了完全不同的事情,从而导致了异常
发布于 2009-11-24 22:03:56
CanRead仅指示该属性具有get访问器。它没有说你可以调用它,它仍然可以是私有的。使用BindingFlags调用私有属性。
发布于 2009-11-24 22:23:44
异常文本提示异常是由getter抛出的。你检查过内部异常了吗?您是否尝试在getter的第一行设置断点?
https://stackoverflow.com/questions/1790145
复制相似问题