Dot-Net

如何將方法 ReturnType 與預定義類型進行比較

  • April 8, 2022

使用 Microsoft Roslyn 我試圖確定方法返回類型是否為 void。

我的 MethodDeclarationSyntax 上有句柄,可以看到名為“ReturnType”的屬性,這是一個 void 的 PredefinedType。我是否必須實際檢查關鍵字種類?有一個更好的方法嗎?

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

有沒有推薦的方法來完成我想做的事情?

因為void,那是完美的,因為沒有其他方式可以說。System.Void那裡明確禁止說。

對於其他預定義類型int,請記住,您可以使用關鍵字或 .NET 類型編寫它System.Int32。根據您的情況,您可能實際上需要區分它們,因此語法檢查仍然是正確的。如果您不關心差異並且只想知道它是否是整數,那麼您應該使用 a 進行一些綁定SemanticModel

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

MethodSymbol還有一個ReturnsVoid屬性,如果你碰巧有它的符號,你可能會發現它很有用。

引用自:https://stackoverflow.com/questions/10106952