2017-06-14 15 views
2

私はCatchDeclarationSyntaxインスタンスを持っており、ステートメントにキャッチされている型のシンボルを取得したいと考えています。Roslyn:変数名を持たないキャッチ宣言からシンボルを取得

キャッチ宣言はcatchedされているタイプの変数名が含まれている場合は、ここで、この記事で説明したように、私はそれを行うことができます。 Get Symbol from CatchDeclaration

例:

... 
catch(NullReferenceException exception) 
{ 
    ... 
} 

NullReferenceExceptionのシンボルを取得タイプ:

ILocalSymbol catchDeclarationSymbol = semanticModel.GetDeclaredSymbol(catchDeclarationSyntax); 
ITypeSymbol exceptionType = catchDeclarationSymbol.Type; 

これは問題なく動作します。

キャッチ宣言がキャッチされたタイプの変数名を含んでいない場合は、問題があります。

例:タイプNullReferenceExceptionのシンボルを取得するには、

... 
catch(NullReferenceException) 
{ 
    ... 
} 

この方法ではありません作業を行います。誰がどのようにNullReferenceExceptionタイプのシンボルを取得するという考えを持っています

ILocalSymbol catchDeclarationSymbol = semanticModel.GetDeclaredSymbol(catchDeclarationSyntax); 
// catchDeclarationSymbol is now null 

この場合?キャッチ宣言 がcatchedされているタイプのための変数名が含まれていません

+0

は 'catchDeclarationSyntax.Type'の仕事をしていますか? – haim770

+0

'SemanticModel.GetTypeInfo()'を試しましたか? – Tamas

答えて

3

でもあれば、私は問題を抱えています。

シンボルが宣言されていない場合はGetDeclaredSymbolを使用できないためです。 catch(NullReferenceException exception)exceptionシンボルを宣言しますが、catch(NullReferenceException)シンボルは宣言しません。

代わりに、あなたはタイプの構文ノードにアクセスし、そのためのタイプのシンボルを取得することができます。

ITypeSymbol exceptionType = model.GetTypeInfo(catchDeclarationSyntax.Type).Type; 
関連する問題