//如果只是关心是否可列举,直接用 o is System.Collections.IEnumerable//如果关心是否IEnumerable<T>,可以: static bool IsObjectGenericIEnumerable(object o) { return o is System.Collections.IEnumerable && (o.GetType().IsGenericType || o is Array); }
本帖最后由 caozhy 于 2011-04-13 12:31:46 编辑
public bool CheckType(object obj) { Type type = obj.GetType(); if (type.IsGenericType) { Type baseType = type.GetInterface("System.Collections.Generic.IEnumerable`1"); if (baseType == null) return false; if (obj.GetType().GetGenericArguments()[0] != typeof(object)) return false; } return true; }
{
MessageBox.Show("true");
}
else
{
MessageBox.Show("false");
}
以前版本都将返回false。
//如果只是关心是否可列举,直接用
o is System.Collections.IEnumerable//如果关心是否IEnumerable<T>,可以:
static bool IsObjectGenericIEnumerable(object o)
{
return o is System.Collections.IEnumerable && (o.GetType().IsGenericType || o is Array);
}
{
Type type = obj.GetType();
if (type.IsGenericType)
{
Type baseType = type.GetInterface("System.Collections.Generic.IEnumerable`1");
if (baseType == null)
return false;
if (obj.GetType().GetGenericArguments()[0] != typeof(object))
return false;
}
return true;
}
你该试试 IEnumerable<object> s = new List<string>(); //.net4.0才能编译通过。
我知道你的意思
4.0下, List<string>的实例就是IEnumerable<object>类型,所以is返回true
2.0下不是,所以is返回false
无论哪个版本,都可以用is直接判断
---这是从lz的原问题来说如果你要追究他到底想实现什么的话,无非就是强制转换或as转换后赋值,那只要用is判断也是足够安全的了