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

时间:2014-05-23 04:30:18

标签: c# vb.net roslyn

示例

Console.WriteLine( arg )

我正在尝试获取声明/定义arg的相应符号(不是接口)。所以我可以举例说,如果我们说下面的代码是定义网站。

Dim x = "Hello World"

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

不幸的是,这是internal

如果有人知道,请你提供一个例子。

1 个答案:

答案 0 :(得分:0)

终于明白了。不是最好的方式(但它适用于我需要它。)

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