如何检查给定的值是否为通用列表?
public bool IsList(object value) { Type type = value.GetType(); // Check if type is a generic list of any type }
检查给定对象是列表还是可以转换为列表的最好方法是什么?
if(value is IList && value.GetType().IsGenericType) { }
对于那些喜欢使用扩展方法的人:
public static bool IsGenericList(this object o) { var oType = o.GetType(); return (oType.IsGenericType && (oType.GetGenericTypeDefinition() == typeof(List<>))); }
所以,我们可以这样做:
if(o.IsGenericList()) { //... }
bool isList = o.GetType().IsGenericType && o.GetType().GetGenericTypeDefinition() == typeof(IList<>));
if(value is IList && value.GetType().GetGenericArguments().Length > 0) { }
public bool IsList(object value) { return value is IList || IsGenericList(value); } public bool IsGenericList(object value) { var type = value.GetType(); return type.IsGenericType && typeof(List<>) == type.GetGenericTypeDefinition(); }
可能最好的办法是做这样的事情:
IList list = value as IList; if (list != null) { // use list in here }
这将为您提供最大的灵活性,并允许您使用许多实现IList
接口的不同types。
根据Victor Rodrigues的回答,我们可以devise出另一种仿制药的方法。 实际上,原来的解决scheme可以简化为只有两行:
public static bool IsGenericList(this object Value) { var t = Value.GetType(); return t.IsGenericType && t.GetGenericTypeDefinition() == typeof(List<>); } public static bool IsGenericList<T>(this object Value) { var t = Value.GetType(); return t.IsGenericType && t.GetGenericTypeDefinition() == typeof(List<T>); }