You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio 2022或ReSharper能否按执行顺序展示成员引用树?

问题:按执行顺序追踪私有成员的赋值操作

背景

我正在重构一个类,其中多个私有方法会修改私有状态,很难追踪每个成员的最终取值。这些赋值操作大多独立于之前的值及彼此,布尔类型成员的最终状态由最后一次调用的赋值决定。

示例代码(VB.NET,逻辑适用于C#)

假设SetVisibilities为入口方法:

Dim isAVisible As Boolean
Dim isBVisible As Boolean
Dim isCVisible As Boolean

Private Sub SetVisibilities()
    ChangeVisibilitiesFirst()
    ChangeVisibilitiesSecond()
    ' 这是C的最后一次修改,但在文件中是最早出现的引用(按行号)
    isCVisible = False
End Sub

Private Sub ChangeVisibilitiesSecond()
    isAVisible = False
    isBVisible = True
    isCVisible = True
End Sub

' 这个方法先被调用,但在文件中定义较晚
Private Sub ChangeVisibilitiesFirst()
    isAVisible = True
    isBVisible = False
    isCVisible = True
End Sub

期望的重构过渡形式

我希望先将每个成员的所有状态变更转换为以下形式,再进一步简化可见性逻辑:

Private Sub SetVisibilities()
    isAVisible = GetVisibilityForA
    isBVisible = GetVisibilityForB
    isCVisible = GetVisibilityForC
End Sub

Private Function GetVisibilityForA() As Boolean
    Dim response As Boolean
    response = True ' 来自: ChangeVisibilitiesFirst()
    response = False ' 来自: ChangeVisibilitiesSecond()
    Return response
End Function

Private Function GetVisibilityForB() As Boolean
    Dim response As Boolean
    response = False ' 来自: ChangeVisibilitiesFirst()
    response = True ' 来自: ChangeVisibilitiesSecond()
    Return response
End Function

Private Function GetVisibilityForC() As Boolean
    Dim response As Boolean
    response = False ' 来自: ChangeVisibilitiesFirst()
    response = True ' 来自: ChangeVisibilitiesSecond()
    response = False ' 来自: SetVisibilities()
    Return response
End Function

当前手动处理方式

我从入口方法SetVisibilities开始,深度遍历每个方法调用及代码行,找到赋值操作后将其追加到对应成员的专属新方法中(有分支时也需追加)。

现有工具的不足

目前使用Visual Studio 2022的「查找所有引用」和「查看调用层次结构」功能,但存在问题:

  • 「查找所有引用」按文件中的出现顺序列出引用,而非执行顺序。
  • 「查看调用层次结构」的树状结构难以解析,比如isCVisible的展示形式为:
- isCVisible
  - ChangeVisibilitiesSecond(), 调用 <b>isCVisible</b> 位于第15行
    - SetVisibilities(), 调用 <b>ChangeVisibilitiesSecond()</b> 位于第7行
  - SetVisibilities(), 调用 <b>isCVisible</b> 位于第5行
  - ChangeVisibilitiesFirst(), 调用 <b>isCVisible</b> 位于第6行
    - SetVisibilities(), 调用 <b>ChangeVisibilitiesFirst()</b> 位于第5行

而我期望的是按执行顺序展示的调用树:

- SetVisibilities()
  - ChangeVisibilitiesFirst()
    - 调用 <b>isCVisible</b> 位于第22行
  - ChangeVisibilitiesSecond()
    - 调用 <b>isCVisible</b> 位于第15行
  - 调用 <b>isCVisible</b> 位于第9行

提问

Visual Studio 2022(或ReSharper)能否按执行顺序展示成员的所有引用列表或树状结构?

内容的提问来源于Stack Exchange,提问作者JuanF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 22:33:14