2012-04-11 3 views
7

Verwenden von Microsoft Roslyn Ich versuche festzustellen, ob eine Methode Rückgabetyp ungültig ist.
Ich habe das Handle auf meine MethodDeclarationSyntax und kann die Eigenschaft namens "ReturnType" Dies ist ein PredefinedType von void. Muss ich tatsächlich die Keyword-Art prüfen? Gibt es einen besseren Weg, dies zu tun?So vergleichen Sie die Methode ReturnType mit vordefinierten Typen

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

Gibt es eine empfohlene Methode, um das zu erreichen, was ich versuche zu tun?

Antwort

6

Für void, das ist perfekt, da es keine andere Möglichkeit gibt, es zu sagen. Das Sagen System.Void ist dort ausdrücklich verboten.

Für andere vordefinierte Typen wie int, denken Sie daran, dass Sie es entweder mit dem Schlüsselwort oder mit dem .NET-Typ System.Int32 schreiben können. Abhängig von Ihrem Szenario könnten Sie tatsächlich zwischen ihnen unterscheiden, und so wäre die syntaktische Prüfung immer noch korrekt. Wenn Sie nicht über den Unterschied egal und wollen einfach nur wissen, ob es eine ganze Zahl ist, sollten Sie dann mit einem SemanticModel einige Bindung tun:

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

MethodSymbol hat auch eine ReturnsVoid Eigenschaft, die Ihnen nützlich sein könnten, wenn Sie passieren um das Symbol dafür zu haben.

+0

Großartig, Danke für die Hilfe. – Jay