C# Roslyn:从没有变量名的catch声明中获取符号
我有一个C# Roslyn:从没有变量名的catch声明中获取符号,c#,.net,roslyn,C#,.net,Roslyn,我有一个CatchDeclarationSyntax实例,我想获取语句中捕获的类型的符号 如果catch声明包含被捕获类型的变量名,我可以按照本文中的描述执行: 例如: ... catch(NullReferenceException exception) { ... } ... catch(NullReferenceException) { ... } 获取NullReferenceException类型的符号: ILocalSymbol catchDeclaration
CatchDeclarationSyntax
实例,我想获取语句中捕获的类型的符号
如果catch声明包含被捕获类型的变量名,我可以按照本文中的描述执行:
例如:
...
catch(NullReferenceException exception)
{
...
}
...
catch(NullReferenceException)
{
...
}
获取NullReferenceException
类型的符号:
ILocalSymbol catchDeclarationSymbol = semanticModel.GetDeclaredSymbol(catchDeclarationSyntax);
ITypeSymbol exceptionType = catchDeclarationSymbol.Type;
这个很好用
但是,如果catch声明不包含被捕获类型的变量名,我就有问题了
例如:
...
catch(NullReferenceException exception)
{
...
}
...
catch(NullReferenceException)
{
...
}
获取类型NullReferenceException
的符号不是这样工作的:
ILocalSymbol catchDeclarationSymbol = semanticModel.GetDeclaredSymbol(catchDeclarationSyntax);
// catchDeclarationSymbol is now null
在这种情况下,有人知道如何获取NullReferenceException
类型的符号吗
但是,如果catch声明不包含被捕获类型的变量名,我就有问题了
这是因为当没有声明符号时,不能使用GetDeclaredSymbol
catch(NullReferenceException)
声明exception
符号,但catch(NullReferenceException)
不声明
相反,您可以访问该类型的语法节点,然后获取该类型的类型符号:
ITypeSymbol exceptionType = model.GetTypeInfo(catchDeclarationSyntax.Type).Type;
catchDeclarationSyntax.Type
有效吗?您是否尝试过SemanticModel.GetTypeInfo()
?