【问题标题】:PropertyInfo GetValue throwing error during recursion递归期间的 PropertyInfo GetValue 抛出错误
【发布时间】:2011-02-01 21:00:42
【问题描述】:

当我尝试在 C# 程序的运行时检索对象的值时,我收到“对象与目标类型不匹配”。

public void GetMyProperties(object obj)
{
  foreach(PropertyInfo pinfo in obj.GetType().GetProperties())
  {
    if(!Helper.IsCustomType(pinfo.PropertyType))
    {
      string s = pinfo.GetValue(obj, null); //throws error during recursion call
      propArray.Add(s);
    }
    else
    {
      object o = pinfo.PropertyType;
      GetMyProperties(o);
    }
  }
}

我传递了我的类 BrokerInfo 的一个对象,该对象具有一个 Broker 类型的属性,该属性又具有属性 - FirstName 和 LastName(为简单起见,所有字符串)。

- BrokerInfo
  - Broker
    - FirstName
    - LastName

我正在尝试递归检查自定义类型并尝试获取它们的值。我可以为以下事情做:

- Broker
  - FirstName
  - LastName

请帮忙。

更新:在 leppie 的帮助下能够解决它:这是修改后的代码。

public void GetMyProperties(object obj)
{
  foreach(PropertyInfo pinfo in obj.GetType().GetProperties())
  {
    if(!Helper.IsCustomType(pinfo.PropertyType))
    {
      string s = pinfo.GetValue(obj, null); 
      propArray.Add(s);
    }
    else
    {
      object o = pinfo.GetValue(obj, null);
      GetMyProperties(o);
    }
  }
}

IsCustom 是我检查类型是否为自定义类型的方法。代码如下:

public static bool IsCustomType(Type type)
{
    //Check for premitive, enum and string
    if (!type.IsPrimitive && !type.IsEnum && type != typeof(string))
    {
        return true;
    }
    return false;
}

【问题讨论】:

  • 你能把Helper.IsCustomType的代码贴出来吗?

标签: c# reflection propertyinfo


【解决方案1】:

为什么要深入研究类型而不是实例?

具体来说:

  object o = pinfo.PropertyType;
  GetMyProperties(o);

它应该看起来像:

  var o = pinfo.GetValue(obj, null);
  GetMyProperties(o);

【讨论】:

  • @thanks leppie,我想我做错了 :) 很快就会试试这个。
  • leppie,完美的解决方案。我已经发布了上面工作的修改代码。虽然现在遇到另一个问题,但会单独发布。谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-02-08
  • 2011-02-19
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 2014-10-01
  • 2019-11-18
  • 1970-01-01
相关资源
最近更新 更多