我正在尝试检测Type对象的特定实例是否为通用的“IEnumerable” ...

我能想到的最好的是:

// theType might be typeof(IEnumerable<string>) for example... or it might not
bool isGenericEnumerable = theType.GetGenericTypeDefinition() == typeof(IEnumerable<object>).GetGenericTypeDefinition()
if(isGenericEnumerable)
{
    Type enumType = theType.GetGenericArguments()[0];
    etc. ...// enumType is now typeof(string)

但这似乎是间接的-是否有更直接/更优雅的方式来做到这一点?

最佳答案

您可以使用

if(theType.IsGenericType && theType.GetGenericTypeDefinition() == typeof(IEnumerable<>))
{
    Type underlyingType = theType.GetGenericArguments()[0];
    //do something here
}

编辑:添加了IsGenericType检查,感谢有用的评论

关于.NET反射: Detecting IEnumerable<T>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1649888/

10-11 21:27