【发布时间】:2015-02-14 03:45:32
【问题描述】:
鉴于这个类:
public class SomeClass
{
public int SomeProperty { get; set; }
public IList<AnotherClass> MyList { get; set; }
}
还有这段代码:
SomeClass myClass = new SomeClass();
PropertyInfo[] properties = myClass.GetType().GetProperties();
for(int i = 0; i < properties.Length; i++)
{
//How can I figure that the current property is a collection/list?
}
我尝试过的事情:
bool a1 = properties[i].PropertyType.IsAssignableFrom(typeof(IList));
//false
bool a2 = properties[i].PropertyType.IsAssignableFrom(typeof(IList<>));
//false
bool a3 = typeof(IList).IsAssignableFrom(properties[i].PropertyType);
//false
bool a4 = typeof(IList<>).IsAssignableFrom(properties[i].PropertyType);
//false
bool a5 = properties[i].PropertyType.Equals(typeof(IList));
//false
bool a6 = properties[i].PropertyType.Equals(typeof(IList<>));
//false
bool a7 = properties[i].PropertyType.IsSubclassOf(typeof(IList));
//false
bool a8 = properties[i].PropertyType.IsSubclassOf(typeof(IList<>));
//false
bool a9 = properties[i].PropertyType is IList;
//false
bool a0 = typeof(ICollection<>).IsAssignableFrom(properties[i].PropertyType);
//false
加上PropertyType.GetType() 以上所有内容。我该如何解决这个问题?
【问题讨论】:
-
我注意到您在某些示例中使用
IsAssignableFrom向后使用 DotNetFiddleExample。 -
a3应该返回 true。
标签: c# reflection