解析是获取成员类型的唯一方法吗?

下面的reflection代码返回:

System.Collections.Generic.IList`1[TestReflection.Car] Cars 

如何通过reflection获得Cars根类型? 不是IList – 我怎么能Car

 using System; using System.Reflection; using System.Collections.Generic; namespace TestReflection { class MainClass { public static void Main(string[] args) { Type t = typeof(Dealer); MemberInfo[] mi = t.GetMember("Cars"); Console.WriteLine("{0}", mi[0].ToString()); Console.ReadLine(); } } class Dealer { public IList Cars { get; set; } } class Car { public string CarModel { get; set; } } } 

最简单的方法是通过PropertyInfo生成一个PropertyInfo来表示有问题的属性,然后生成它的底层类型。 然后,只需检索此generics类型的类型参数,您可以使用Type.GetGenericArguments

 Type carsElementType = typeof(Dealer) .GetProperty("Cars") .PropertyType // typeof(IList) .GetGenericArguments() // new[] { typeof(Car) } .Single(); // typeof(Car) 

您将Type对象用于已关闭的Type,然后使用GetGenericArguments返回替换generics参数的所有类型的列表。

 var l = new List(); foreach(var genericArg in l.GetType().GetGenericArguments()) Console.WriteLine(genericArg); // returns Int32