How to determine if object is of type IEnumerable
Code:
namespace NS {
class Program {
static IEnumerable GetInts()
If you mean the collection, then just as
:
var asEnumerable = i as IEnumerable;
if(asEnumerable != null) { ... }
However, I'm assuming (from the example) that you have a Type
:
The object will never be "of" type IEnumerable
- but it might implement it; I would expect that:
if(typeof(IEnumerable).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
for any T
- otherwise check t
.