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

标签 .net roslyn

使用 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/

相关文章:

c# - 单声道:无法加载文件或程序集 'System.Threading.Tasks.Dataflow'

c# - 在 C# 中尽早终止 Roslyn 脚本

c# - 将标记和琐事映射到行号

c# - 如何禁用所有 Roslyn 代码分析器?

.net - 为什么我的WCF服务返回10次调用后超时的FaultException?

c# - 如何通过WMI从 'Win32_ProcessStopTrace'类获取附加信息?

c# - 我应该先在 EF 代码中映射双向关系的两侧吗?

c# - 事件源异常 : No Free Buffers available from the operating system

c# - 发出 IL 代码以加载十进制值

.net - SQL Server 停止加载程序集