2017-10-24 11 views
0

列挙可能なコレクションのISymbolオブジェクトがあり、基になる型を取得する必要があります。ISymbolからIEnumerableコレクションの基になる型を取得する

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; 
} 
+0

あなたが何かのようにしている場合、あなたは –

+0

を試してみましたコードを共有してください:IListの collNameを...あなたが行うことができます - collName.GetTypeを()基になる型を見つける –

+0

[Type IEnumerable からTを取得する可能性があります](https://stackoverflow.com/questions/906499/getting-type-t-from-ienumerablet) – mitaness

答えて

0

みんなありがとう:

は、ここに私のコードスニペットです。私はINamedTypeSymbolインタフェース周り詮索してこの問題を解決する簡単な方法を見つけました:

private ITypeSymbol GetUnderlyingTypeFromEnumerable(INamedTypeSymbol symbol) 
    { 
     return symbol.TypeArguments.First(); 
    } 
関連する問題