从变量使用站点获取声明源

本文关键字:获取 声明 站点 变量 | 更新日期: 2023-09-27 18:04:55

示例

Console.WriteLine( arg )

我试图获得相应的符号(不是接口),其中arg被声明/定义。所以我可以举个例子如果我们说下面的代码是定义站点。

Dim x = "Hello World"

这样我就可以得到分配值Hello World的跨度/位置请注意,不是在文本之后,因为我可以在使用站点上获得变量arg的值。调试器本地/监视窗口显示类型Microsoft.CodeAnalysis.VisualBasic.Symbols.LocalSymbol.VariableLocalSymbol

不幸的是这是internal

如果有人知道,请举个例子。

从变量使用站点获取声明源

终于想通了。Don't是最好的方法(但它只适用于我需要它的地方)

Dim ThisIdentifier = CType(TheFormatString.Expression, IdentifierNameSyntax)
If ThisIdentifier Is Nothing Then Exit Sub
Dim ConstValue = semanticModel.GetConstantValue(ThisIdentifier, cancellationToken)
If ConstValue.HasValue = False Then Exit Sub
Dim FoundSymbol = semanticModel.LookupSymbols(TheFormatString.Expression.Span.Start, name:=ThisIdentifier.Identifier.Text)(0)
Dim VariableDeclarationSite = TryCast(FoundSymbol.DeclaringSyntaxReferences(0).GetSyntax.Parent, VariableDeclaratorSyntax)
If VariableDeclarationSite Is Nothing Then Exit Sub
Dim TheValueOfTheVariable = VariableDeclarationSite.Initializer.Value