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()