通过反思获取列表

时间:2016-07-14 16:02:48

标签: c# list reflection

我有一些类包含一个PropertyInfo类型的List:

P

我有一个该类的实例,但不知道它在运行时是哪个类。所以对于那个实例,在我的情况下,它被称为var PropList = P.GetType().GetProperty("Properties").GetValue(this, null) ,我需要遍历上面提到的列表。现在我可以使用:

获取属性的值
foreach (var thisProp in PropList) - I get an error.

但如果我试图循环它:

ffmpeg -ss 00:00:00.33 -i user_17624_1-1762.webm -i user_17624_2-1767.webm -r 15 output_good.mp4

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

由于

2 个答案:

答案 0 :(得分:3)

你必须施放

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

答案 1 :(得分:0)

在审核完您的代码后,很清楚

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

不会返回由于您获得的错误而导致的异常数据。一种可能的解决方案要解决此问题,您需要将其强制转换为Ienumerable。

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