首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PropertyInfo.CanRead和PropertyInfo.CanWrite

PropertyInfo.CanRead和PropertyInfo.CanWrite
EN

Stack Overflow用户
提问于 2009-11-24 21:41:17
回答 3查看 976关注 0票数 0

我对PropertyInfo.CanRead/Write的工作原理有点困惑。

我在一个类上有一个特殊的属性,其中CanRead返回true,CanWrite返回false。但是,如果我尝试对此属性执行property.GetValue(myObject,null),则会收到异常消息"Exception已由调用的目标抛出“。

如果我能够读取这个属性,为什么GetValue()会失败呢?

非常感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-24 21:48:56

从本质上讲,你想做的事情是正确的。

代码语言:javascript
复制
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内部发生了完全不同的事情,从而导致了异常

票数 0
EN

Stack Overflow用户

发布于 2009-11-24 22:03:56

CanRead仅指示该属性具有get访问器。它没有说你可以调用它,它仍然可以是私有的。使用BindingFlags调用私有属性。

票数 4
EN

Stack Overflow用户

发布于 2009-11-24 22:23:44

异常文本提示异常是由getter抛出的。你检查过内部异常了吗?您是否尝试在getter的第一行设置断点?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1790145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档