使用反射在IList <T>中查找<T>

pho*_*tom 1 c# c#-4.0

我正在一个项目中,我必须通过数据模型进行反思,以找出数据模型中每个属性的类型。我的代码适用于除通用集合以外的所有情况。我必须能够知道IList中的T。

我有以下数据模型

public class ArrryOfObjects
{
    public NestModelNestedClass NestClass { get; set; }
    public int IntObject { get; set; }
    public IList<NestModelNestedClass> ListOfObjects { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我已经看到了几个示例,例如/sf/answers/73064491/,该演示了如何执行此操作,但是它们使用type.GetGenericTypeDefinition()来获取类型。但是在我的示例中,我无法使用它,因为'type.IsGeneric.Parameter'为false。

我已经阅读了类型文档,但不了解如何执行此操作。

das*_*ght 5

尝试这个:

var t = typeof(ArrryOfObjects)
    .GetProperty("ListOfObjects")
    .PropertyType
    .GetGenericArguments()[0];
Run Code Online (Sandbox Code Playgroud)

它是这样工作的:

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

PS GetGenericTypeDefinition使您获得typeof(IList<>),其通用类型IList<NestModelNestedClass>是通用实例。