【问题标题】:Finding <T> in IList<T> using reflection [duplicate]使用反射在 IList<T> 中查找 <T> [重复]
【发布时间】:2011-12-26 16:09:08
【问题描述】:

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

我有以下数据模型

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' 是假的。

我查看了 Type 文档,但不明白如何执行此操作。

【问题讨论】:

    标签: c# c#-4.0


    【解决方案1】:

    试试这个:

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

    这就是它的工作原理:

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

    附: GetGenericTypeDefinition 得到typeof(IList&lt;&gt;),其中IList&lt;NestModelNestedClass&gt; 是泛型实例的泛型类型。

    【讨论】:

    • 谢谢。我的实际代码与您的基本相同,除了 GetGenericArguements() 上的 [0]。
    猜你喜欢
    • 1970-01-01
    • 2017-06-10
    • 2012-05-28
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2011-06-01
    • 2011-03-08
    相关资源
    最近更新 更多