从具有声明的超类类型的List获取列表类型

时间:2011-07-08 22:28:21

标签: c# reflection

我有三个类(动物,哺乳动物和爬行动物),其中哺乳动物和爬行动物是动物的子类。

我有一份动物清单,我只使用哺乳动物或爬行动物。我想在运行时获取列表中的类型。

使用列表本身不起作用。

Type type = myList.GetType().GetProperty("Item").PropertyType;
// type -> Animal

Type type = myList.GetType().GetGenericArguments()[0];
// type -> Animal

这个列表也是另一个类的属性,我们称之为Biome。 Biome有两个属性,爬行动物(List)和哺乳动物(List)。给定一个实例的集合属性,我可以找到项目类型吗?

2 个答案:

答案 0 :(得分:2)

获取列表中项目的类型,而不是列表类型:

Type type = myList[0].GetType();

答案 1 :(得分:0)

如果您使用的是.NET 4.0并且在创建列表时知道元素的类型,则可以按以下方式应用Generic Covariance

List<Animal> myList = new List<Reptile>();

这将使用Reflection生成适当的输出。