如何使用反射确定已实现接口的泛型类型?

时间:2013-11-18 04:10:19

标签: c# generics reflection

我正在编写一些需要在运行时使用反射来发现对象中所有属性类型的东西。我很好用简单的属性,我得到PropertyInfo,类型是直接可用的。但是,我无法弄清楚如何为通用集合做些什么。例如,假设我在运行时传递了以下类的实例:

public class AnyClass
  {
  public ICollection<int> ListOfInts;
  }

所以我使用Type.GetProperties,很快我就拥有了PropertyInfo的{​​{1}}个对象。

我的下一步是什么?我如何从拥有PropertyInfo,到确定它是一个int列表?如何从ListOfInts确定集合的泛型类型(此示例中为<int>)?

2 个答案:

答案 0 :(得分:2)

您可以获取通用参数类型的名称:

propertyInfo.PropertyType.GetGenericArguments()[0].Name

答案 1 :(得分:2)

我相信你正在寻找这种类型的泛型参数。请参阅PropertyInfo.PropertyTypeType.GenericTypeArguments

PropertyInfo.PropertyType.GenericTypeArgument