2012-04-11 79 views
7

使用Microsoft Roslyn我試圖確定方法返回類型是否爲void。
我在我的MethodDeclarationSyntax上有句柄,可以看到名爲「ReturnType」的屬性,這是一個預定義的void類型。我是否必須真正檢查關鍵字種類?有一個更好的方法嗎?如何將方法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 2012-04-12 16:01:36

相關問題