我正在开发一个项目,我必须通过数据模型进行反射(reflection),以找出数据模型上每个属性的类型。我的代码适用于除通用集合之外的所有情况。我必须能够知道 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”为 false。
我已查看类型文档,但不明白如何执行此操作。
最佳答案
试试这个:
var t = typeof(ArrryOfObjects)
.GetProperty("ListOfObjects")
.PropertyType
.GetGenericArguments()[0];
它是这样工作的:
- 来自
ArrryOfObjects
的类型... - 获取名为
ListOfObjects
的属性... - 获取该属性的类型...
- 我们知道这是一种至少具有一个类型参数的泛型类型。
- 我们得到第一个类型参数 - 在您的示例中它应该是
typeof(NestModelNestedClass)
附注GetGenericTypeDefinition
为您提供typeof(IList<>)
,其中 IList<NestModelNestedClass>
的泛型类型是一个通用实例。
关于c# - 使用反射在 IList<T> 中查找 <T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8637320/