使用 Microsoft Roslyn 我试图确定方法返回类型是否为 void。
我的 MethodDeclarationSyntax 上有句柄,可以看到名为“ReturnType”的属性,这是一个 void 的 PredefinedType。我是否必须实际检查关键字种类?有一个更好的方法吗?
((PredefinedTypeSyntax)methodDec.ReturnType).Keyword.Kind() != SyntaxKind.VoidKeyword
有没有推荐的方法来完成我想做的事情?
最佳答案
对于 void
,这是完美的,因为没有其他方式可以说。说System.Void
那里明确禁止。
对于其他预定义类型,如 int
, 请记住,您可以使用关键字或 .NET 类型 System.Int32
编写它.根据您的情况,您可能真的很想区分它们,因此语法检查仍然是正确的。如果您不关心差异并且只想知道它是否是整数,那么您应该使用 SemanticModel
进行一些绑定(bind)。 :
var methodSymbol = (MethodSymbol)semanticModel.GetDeclaredSymbol(methodDecl);
if (methodSymbol.ReturnType.SpecialType == SpecialType.System_Int32)
{
/* ...whatever goes here */
}
MethodSymbol
还有一个ReturnsVoid
如果您碰巧有它的符号,您可能会发现它很有用。
关于.net - 如何将方法 ReturnType 与预定义类型进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10106952/