Roslyn:从没有变量名的 catch 声明中获取符号
Roslyn: Get Symbol from catch declaration having no variable name
我有一个 CatchDeclarationSyntax
实例,我想获取语句中捕获的类型的符号。
如果 catch 声明包含被捕获类型的变量名,我可以按照本文中的描述进行操作:
示例:
...
catch(NullReferenceException exception)
{
...
}
获取 NullReferenceException
类型的符号:
ILocalSymbol catchDeclarationSymbol = semanticModel.GetDeclaredSymbol(catchDeclarationSyntax);
ITypeSymbol exceptionType = catchDeclarationSymbol.Type;
这很好用。
但是如果 catch 声明不包含被捕获类型的变量名,我就有问题了。
示例:
...
catch(NullReferenceException)
{
...
}
获取类型 NullReferenceException
的符号 不会 这样工作:
ILocalSymbol catchDeclarationSymbol = semanticModel.GetDeclaredSymbol(catchDeclarationSyntax);
// catchDeclarationSymbol is now null
在这种情况下,有人知道如何获取 NullReferenceException
类型的符号吗?
But if the catch declaration doesn't contain a variable name for the type being catched, I have problems.
那是因为当没有符号被声明时你不能使用GetDeclaredSymbol
。 catch(NullReferenceException exception)
声明了 exception
符号,但 catch(NullReferenceException)
没有。
相反,您可以访问该类型的语法节点,然后获取该类型的类型符号:
ITypeSymbol exceptionType = model.GetTypeInfo(catchDeclarationSyntax.Type).Type;
我有一个 CatchDeclarationSyntax
实例,我想获取语句中捕获的类型的符号。
如果 catch 声明包含被捕获类型的变量名,我可以按照本文中的描述进行操作:
示例:
...
catch(NullReferenceException exception)
{
...
}
获取 NullReferenceException
类型的符号:
ILocalSymbol catchDeclarationSymbol = semanticModel.GetDeclaredSymbol(catchDeclarationSyntax);
ITypeSymbol exceptionType = catchDeclarationSymbol.Type;
这很好用。
但是如果 catch 声明不包含被捕获类型的变量名,我就有问题了。
示例:
...
catch(NullReferenceException)
{
...
}
获取类型 NullReferenceException
的符号 不会 这样工作:
ILocalSymbol catchDeclarationSymbol = semanticModel.GetDeclaredSymbol(catchDeclarationSyntax);
// catchDeclarationSymbol is now null
在这种情况下,有人知道如何获取 NullReferenceException
类型的符号吗?
But if the catch declaration doesn't contain a variable name for the type being catched, I have problems.
那是因为当没有符号被声明时你不能使用GetDeclaredSymbol
。 catch(NullReferenceException exception)
声明了 exception
符号,但 catch(NullReferenceException)
没有。
相反,您可以访问该类型的语法节点,然后获取该类型的类型符号:
ITypeSymbol exceptionType = model.GetTypeInfo(catchDeclarationSyntax.Type).Type;