簡體   English   中英

Roslyn:從不帶變量名的catch聲明中獲取Symbol

[英]Roslyn: Get Symbol from catch declaration having no variable name

我有一個CatchDeclarationSyntax實例,我想獲取語句中CatchDeclarationSyntax的類型的符號。

如果catch聲明包含要捕獲的類型的變量名,則可以按照本文中的說明進行操作: 從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類型的符號嗎?

但是,如果catch聲明中不包含要捕獲的類型的變量名,那么我會遇到問題。

那是因為當沒有符號被聲明時,您不能使用GetDeclaredSymbol catch(NullReferenceException exception)聲明exception符號,但是catch(NullReferenceException)沒有聲明。

相反,您可以訪問該類型的語法節點,然后獲取該類型的類型符號:

ITypeSymbol exceptionType = model.GetTypeInfo(catchDeclarationSyntax.Type).Type;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM