PropertyInfo.GetValue在自定义类上失败

时间:2012-01-18 07:49:04

标签: xna c# reflection

我有一个对象RenderComponent,它有一个名为Model的属性,类型为StaticModel。当我获得PropertyInfo的{​​{1}}然后在其上调用RenderComponent时,它会给我一个TargetException,说“对象与目标类型不匹配。”

我会写一小段代码,为您提供失败的要点。这是层次结构:

GetValue()

我基本上是这样做的:

public class RenderComponent
{
    StaticModel Model;
}

public class StaticModel
{

}

我的程序当然要复杂得多,但我仍然看不出它是如何失败的。我必须遗漏一些简单的东西。

我在这一行得到例外:

RenderComponent renderComponent = new RenderComponent(); PropertyInfo[] props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (PropertyInfo info in props) { // I get the exception here Object value = info.GetValue(renderComponent, null); }

其中info.GetValue(obj, null)info的{​​{1}},PropertyInfo是实例化的StaticModel。当我停在这个异常并对obj进行监视时,我可以实际逐步执行层次结构,直到获得我的StaticModel值,并且它存在且具有我期望的数据。

我确定如果我使用我在这个帖子中发布的小代码示例它会正常工作,所以它必须与我在引擎中调用它的方式有关,我只是看不到GetValue如何能够当obj明显具有该值时,会失败。

这是我调试'obj'并找到StaticModel的截图: enter image description here

这是我得到的错误: enter image description here

在这里你可以看到objRenderComponent的值,作为我传递的对象实例是RenderComponent的证据,而我正在调用GetValue的PropertyInfo是静态模型(RenderComponent的成员,如第一张图片所示: enter image description here

1 个答案:

答案 0 :(得分:0)

sos00对原始问题的评论是对这个问题的正确答案。他的评论是:

  

为什么obj(在上一次观看截图中)有Key&值?不应该是RenderComponent?我认为您传递的是KeyValuePair而不是RenderComponent实例