如何将方法ReturnType与预定义类型进行比较

时间:2012-04-11 13:31:50

标签: .net roslyn

使用Microsoft Roslyn我试图确定方法返回类型是否为空 我在MethodDeclarationSyntax上有句柄,可以看到名为“ReturnType”的属性,这是一个void的PredefinedType。我是否必须实际检查关键字类型?有更好的方法吗?

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

是否有推荐的方法来完成我想要做的事情?

1 个答案:

答案 0 :(得分:8)

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属性,如果你碰巧有它的符号,你会发现它很有用。