2012-04-11 10 views
7

Utilizzo di Microsoft Roslyn Sto cercando di determinare se un metodo restituisce il tipo è nullo.
Ho l'handle sul mio MethodDeclarationSyntax e posso vedere la proprietà Chiamata "ReturnType" questo è un PredefinedType di void. Devo effettivamente controllare il tipo di parola chiave? C'è un modo migliore per farlo?Come confrontare il metodo ReturnType con i tipi predefiniti

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

Esiste un metodo consigliato per realizzare ciò che sto cercando di fare?

risposta

6

Per void, è perfetto, poiché non c'è altro modo di dirlo. Dire che System.Void è esplicitamente proibito lì.

Per altri tipi predefiniti come int, tenere presente che è possibile scriverlo con la parola chiave o con il tipo .NET System.Int32. A seconda del tuo scenario, potresti effettivamente preoccuparti di distinguerli, quindi il controllo sintattico sarebbe ancora corretto. Se non vi interessa circa la differenza e si desidera conoscere se si tratta di un numero intero, si dovrebbe quindi fare un po 'di legame con un SemanticModel:

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

MethodSymbol ha anche una proprietà ReturnsVoid che si potrebbe trovare utile se vi capita avere il simbolo per questo.

+0

Ottimo, grazie per l'aiuto. – Jay

Problemi correlati