假设您有 IList 或 List 作为属性。您如何确定它是 List 还是 IList?这可以在不依赖反复试验的情况下完成吗?
类型的名称往往类似于 List`1。考虑字符串破解是否合理?
class Program {
public class Class1 {
public int a { get; set; }
public IList<int> list { get; set; }
public List<int> concreteList { get; set; }
}
static void Main(string[] args)
{
Test1();
Test2();
}
private static void Test1()
{
var t = typeof (Class1);
var p = t.GetProperty("list");
if (p.PropertyType.IsInterface && p.PropertyType.IsGenericType)
{
var ps = p.PropertyType.GetGenericArguments();
var underlying = p.PropertyType.GetInterface("IList");
var b = underlying == typeof (IList<>);
}
}
private static void Test2() {
var t = typeof(Class1);
var p = t.GetProperty("concreteList");
if (!p.PropertyType.IsInterface && p.PropertyType.IsGenericType) {
var ps = p.PropertyType.GetGenericArguments();
var underlying3 = p.PropertyType.GetGenericTypeDefinition();
var b = underlying3 == typeof (List<>);
}
}
}