我有一个CatchDeclarationSyntax
实例,我想获取语句中捕获的类型的符号。
如果catch声明包含要捕获的类型的变量名,我可以按照本文中的描述执行此操作: Get Symbol from CatchDeclaration
示例:
...
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
类型的符号吗?
答案 0 :(得分:3)
但是如果catch声明没有包含被捕获类型的变量名,那么我就会遇到问题。
那是因为当没有声明符号时你不能使用catch(NullReferenceException exception)
。 exception
声明catch(NullReferenceException)
符号,但ITypeSymbol exceptionType = model.GetTypeInfo(catchDeclarationSyntax.Type).Type;
不符号。
相反,您可以访问该类型的语法节点,然后获取该类型的符号:
<Grid>
<Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="238,89,0,0" VerticalAlignment="Top" Width="75" Click="button_Click"/>
<Controls:TransitioningContentControl x:Name="transitioning" Transition="Down">
<StackPanel>
<TextBox x:Name="textBox1" HorizontalAlignment="Left" Height="95" Margin="345,51,0,0" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" VerticalAlignment="Top" Width="211" Controls:TextBoxHelper.Watermark="Hi Im a watermark" Background="#FF7400FF"/>
<TextBox x:Name="textBox2" HorizontalAlignment="Left" Height="95" Margin="0,51,0,0" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" VerticalAlignment="Top" Width="211" Controls:TextBoxHelper.Watermark="Hi im another watermark" Background="#FF7400FF"/>
</StackPanel>
</Controls:TransitioningContentControl>
</Grid>