从其ISymbol获取IEnumerable集合的基础类型

时间:2017-10-24 10:15:06

标签: c# .net collections roslyn

我有一个可枚举集合的ISymbol对象,需要获取基础类型。

e.g。

List<int> intList;

对于intList我有ISymbol,需要找到底层类型 - 在这种情况下,它是int。

我尝试使用列出的代码here,但似乎反射在这里不起作用。

这是我的代码段:

private Type GetUnderlyingTypeFromEnumerable(ISymbol symbol)
{  
    Type eType = null;  
    Type[] interfaces = symbol.GetType().GetInterfaces();  
    foreach (Type i in interfaces)  
        if (i.IsGenericType && i.GetGenericTypeDefinition().Equals(typeof(IEnumerable<>)))  
        {  
            eType = i.GetGenericArguments()[0];  
            break;  
        }  

    return eType;  
}

1 个答案:

答案 0 :(得分:0)

谢谢大家。我在INamedTypeSymbol界面附近撬了一下,找到了解决这个问题的简单方法:

    private ITypeSymbol GetUnderlyingTypeFromEnumerable(INamedTypeSymbol symbol)
    {
        return symbol.TypeArguments.First();
    }