通过反射获取列表



我有一些类包含一个类型为PropertyInfo的列表:

public List<PropertyInfo> Properties {get; set;}

我有一个该类的实例,但不知道它在运行时是哪个类。所以在这种情况下,在我的情况下它被称为 P ,我需要遍历上面提到的列表。现在,我可以使用以下方法获取属性的值:

var PropList = P.GetType().GetProperty("Properties").GetValue(this, null)

但是如果我尝试循环遍历它:

foreach (var thisProp in PropList) - I get an error.

那么,还有其他方法可以做到这一点吗?

谢谢

你必须投射

var PropList = P
  .GetType()
  .GetProperty("Properties")
  .GetValue(P, null) as IEnumerable<PropertyInfo>; // notice "as ..."
// Since PropList is IEnumerable<T> you can loop over it
foreach (var thisProp in PropList) {
  ...
}

因为只有GetValue(...)返回object.

在查看您的代码后,很明显

 var PropList = P.GetType().GetProperty("Properties").GetValue(this, null)

不返回一个 ienumerable,由于它你得到和错误。一种可能的解决方案 要解决此问题,您需要将其强制转换为 Ienumerable。

 var PropList = P
 .GetType()
 .GetProperty("Properties")
 .GetValue(this, null) as IEnumerable<PropertyInfo>;

相关内容

  • 没有找到相关文章

最新更新