【问题标题】:Get the declaration source from a variable usage site从变量使用站点获取声明源
【发布时间】:2014-05-24 07:52:54
【问题描述】:

一个例子

Console.WriteLine( arg )

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

Dim x = "Hello World"

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

不幸的是,这是internal

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

【问题讨论】:

  • 通过定义站点,您是否只是指,例如,去定义会带您去哪里?

标签: c# vb.net roslyn


【解决方案1】:

终于明白了。不要是最好的方法(但它可以满足我的需要。)

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

【讨论】:

    猜你喜欢
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    相关资源
    最近更新 更多