如何检查给定的值是否为通用列表?

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>); }