在IList <t>中使用反射</t> </t>查找<t>

时间:2011-12-26 16:09:08

标签: c# c#-4.0

我正在开展一个项目,我必须通过数据模型来反映数据模型中每个属性的类型。除了泛型集合之外,我的代码适用于所有情况。我必须能够知道IL在IList中的含义。

我有以下数据模型

public class ArrryOfObjects
{
    public NestModelNestedClass NestClass { get; set; }
    public int IntObject { get; set; }
    public IList<NestModelNestedClass> ListOfObjects { get; set; }
}

我已经看过几个例子,比如https://stackoverflow.com/a/1043778/136717如何做到这一点,但他们使用type.GetGenericTypeDefinition()来获取类型。但是在我的示例中我不能使用它,因为'type.IsGeneric.Parameter'是错误的。

我查看了类型文档,但不了解如何执行此操作。

1 个答案:

答案 0 :(得分:5)

试试这个:

var t = typeof(ArrryOfObjects)
    .GetProperty("ListOfObjects")
    .PropertyType
    .GetGenericArguments()[0];

这是它的工作原理:

  • 来自ArrryOfObjects ...
  • 的类型
  • 获取名为ListOfObjects ...
  • 的属性
  • 获取该属性的类型......
  • 我们知道它是一个至少有一个类型参数的泛型类型。
  • 我们得到第一个类型参数 - 在您的示例中应该是typeof(NestModelNestedClass)

P.S。 GetGenericTypeDefinition获取typeof(IList<>)IList<NestModelNestedClass>是通用实例的泛型类型。