首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PropertyInfo.GetValue( null,null)返回null

PropertyInfo.GetValue( null,null)返回null
EN

Stack Overflow用户
提问于 2008-10-15 20:07:26
回答 5查看 12.4K关注 0票数 2

我有一个带有静态公共属性"Info“的类。通过反射,我想获得这个属性值,所以我调用:

代码语言:javascript
复制
PropertyInfo pi myType.GetProperty("Info");
string info = (string) pi.GetValue(null, null);

只要属性是string类型,就可以很好地工作。但实际上,我的属性是IPluginInfo类型,并且在Info属性get访问器中实例化并返回一个PluginInfo类型(实现IPluginInfo),如下所示:

代码语言:javascript
复制
public static IPluginInfo PluginInfo
{
    get 
    {
        IPluginInfo Info = new PluginInfo();
        Info.Name = "PluginName";
        Info.Version = "PluginVersion";
        return Info;
    }
}

当我调用时就像这样:

代码语言:javascript
复制
IPluginInfo info = pi.GetValue(null, null) as IPluginInfo;

info始终为空,而PropertyInfo pi仍然有效。我是不是漏掉了什么明显的东西?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-10-15 20:13:17

你能创建一个简短但完整的程序来演示这个问题吗?

既然你正在谈论插件,我猜你会遇到在两个不同的程序集中定义IPluginInfo的问题。看看this article是否有帮助。

验证它的最简单方法是首先调用pi.GetValue并将结果存储在object变量中,然后在另一行中执行强制转换或"as“。这样,您就可以中断调试器并在返回值丢失之前查看返回值。

票数 3
EN

Stack Overflow用户

发布于 2008-10-15 20:15:15

我的第一个猜测是您已经重新声明了IPluginInfo接口。所有.NET类型的作用域都是由它们的程序集限定的;如果在两个程序集中有相同的类文件,则有两个不同的接口恰好具有相同的名称。

票数 1
EN

Stack Overflow用户

发布于 2008-10-15 21:41:07

好的,谢谢你的回答。

我确实已经在一个单独的.dll中拥有了这个插件接口,但是我已经将这个.dll放在了pluginhosts目录以及所有插件所在的目录中。

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

https://stackoverflow.com/questions/206198

复制
相关文章

相似问题

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