使用反射在 IList<T> 中查找 <T> [重复]
Posted
技术标签:
【中文标题】使用反射在 IList<T> 中查找 <T> [重复]【英文标题】:Finding <T> in IList<T> using reflection [duplicate] 【发布时间】: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://***.com/a/1043778/136717 说明如何做到这一点,但他们使用type.GetGenericTypeDefinition()
来获取类型。但在我的示例中,我不能使用它,因为 'type.IsGeneric.Parameter' 是假的。
我查看了 Type 文档,但不明白如何执行此操作。
【问题讨论】:
【参考方案1】:试试这个:
var t = typeof(ArrryOfObjects)
.GetProperty("ListOfObjects")
.PropertyType
.GetGenericArguments()[0];
这就是它的工作原理:
来自ArrryOfObjects
的类型...
获取名为ListOfObjects
的属性...
获取该属性的类型...
我们知道它是具有至少一个类型参数的泛型类型。
我们得到第一个类型参数——在你的例子中它应该是typeof(NestModelNestedClass)
附: GetGenericTypeDefinition
得到typeof(IList<>)
,其中IList<NestModelNestedClass>
是泛型实例的泛型类型。
【讨论】:
谢谢。我的实际代码与您的基本相同,除了 GetGenericArguements() 上的 [0]。以上是关于使用反射在 IList<T> 中查找 <T> [重复]的主要内容,如果未能解决你的问题,请参考以下文章