If you mean the collection, then just as
:
var asEnumerable = i as IEnumerable<int>;
if(asEnumerable != null) { ... }
However, I'm assuming (from the example) that you have a Type
:
The object will never be "of" type IEnumerable<int>
- but it might implement it; I would expect that:
if(typeof(IEnumerable<int>).IsAssignableFrom(type)) {...}
would do. If you don't know the T
(int
in the above), then check all the implemented interfaces:
static Type GetEnumerableType(Type type) {
if (type.IsInterface && type.GetGenericTypeDefinition() == typeof(IEnumerable<>))
return type.GetGenericArguments()[0];
foreach (Type intType in type.GetInterfaces()) {
if (intType.IsGenericType
&& intType.GetGenericTypeDefinition() == typeof(IEnumerable<>)) {
return intType.GetGenericArguments()[0];
}
}
return null;
}
and call:
Type t = GetEnumerableType(type);
if this is null, it isn't IEnumerable<T>
for any T
- otherwise check t
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…