2012-04-11 17 views
7

Microsoft Roslynを使用するメソッドの戻り値の型が無効かどうかを調べようとしています。
私はMethodDeclarationSyntaxにハンドルを持ち、 "ReturnType"という名前のプロパティを見ることができます。これはvoidのPredefinedTypeです。実際にキーワードの種類を確認する必要がありますか?これを行うより良い方法はありますか?メソッドReturnTypeと定義済みの型を比較す​​る方法

((PredefinedTypeSyntax)methodDec.ReturnType).Keyword.Kind != SyntaxKind.VoidKeyword 

私がしようとしていることを達成するための推奨方法はありますか?

答えて

6

voidの場合、これは他に言い方がないので完璧です。 System.Voidと明示的には禁止されています。

intのようなその他の定義済みタイプの場合は、キーワードまたは.NETタイプSystem.Int32で記述することができます。あなたのシナリオに応じて、実際にはそれらを区別することに注意するかもしれないので、構文チェックはまだ正しいでしょう。あなたは違いを気にし、ちょうどそれが整数だかどうかを知りたくない場合は、あなたがして行う必要がありますいくつかのSemanticModelとの結合:

var methodSymbol = (MethodSymbol)semanticModel.GetDeclaredSymbol(methodDecl); 
if (methodSymbol.ReturnType.SpecialType == SpecialType.System_Int32) 
{ 
    /* ...whatever goes here */ 
} 

MethodSymbolも、あなたが起こる場合に便利かもしれませんReturnsVoid性質を持っていますそれのためのシンボルを持っている。

+0

偉大な、助けをありがとう。 – Jay

関連する問題