解析是获取成员类型的唯一方法吗?
下面的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