【问题标题】:Is there a (better) way to find all references to a property setter?是否有(更好的)方法来查找对属性设置器的所有引用?
【发布时间】:2019-05-31 16:11:48
【问题描述】:

Visual Studio 的“查找所有引用”功能可以很好地查找对属性的引用,而且碰巧“调用层次结构”也可以做到这一点 - 事实上它甚至更好,因为它通过调用方法对它们进行排序。

然而,我的问题是这些方法都不能区分 setter 和 getter,因此我只能使用 find-in-files 来查找“PropertyName =”。

这似乎是倒退了一步(显然找不到使用“PropertyName += value”或类似的代码),所以我想知道我是否错过了说服 Visual Studio 的“调用层次结构”功能的简单方法专门研究属性设置器或获取器?

【问题讨论】:

  • 如果不以传统方式编写自己的 setter / getter 方法,可能不会,例如getNumber()setNumber()
  • 对产品插件感到抱歉,但 Resharper 可以做到这一点 - 加上无数其他事情。如果你还没有,至少值得一看。
  • 我知道 Resharper 是多么了不起,但不幸的是,目前这对我来说并不合理。此外,Mellamokb 说“不是真的,不,不是没有 [foo]”是一个非常好的答案 - 如果你把它写出来并且没有其他人有任何有趣的解决方法,我可能会选择它。
  • 我想知道这在 Visual Studio 2015 中是否发生了变化。

标签: c# visual-studio visual-studio-2010


【解决方案1】:

Resharper 可以为您做到这一点。

如果没有 R#,一种方法是将 setter 临时设置为私有并重新编译。这将在您尝试设置的任何地方出现错误。不漂亮,但比我能想到的任何其他方法都快。

【讨论】:

  • 不幸的是,它在基本 Visual Studio 中不起作用,它告诉我这不是方法名称,并且似乎允许对属性调用层次结构的唯一东西是属性名称本身。
  • @Ben,他告诉你将设置器更改为private set,然后重新构建并查找编译错误。这完全不需要任何重构工具。
  • @JSBangs:我最初的回答表明没有 Resharper 的 VS 可以做到这一点,但它不能。所以我编辑了我的答案,包括将设置器更改为私有并重新编译的选项。很抱歉造成混乱。
  • 我没想过将其设置为私有,实际上...这应该可以快速修复,谢谢。如果它有效,它不需要漂亮,至少在这种情况下:)
  • 比设置为 private 更好的是完全删除 setter,以便可以找到同一类中的访问(如果需要)。此外,可以编写仅设置属性(但如果在提交的代码中执行此操作,则准备被射击!)以通过编译错误查找对 getter 的所有访问。很烦人的是,Visual Studio 拒绝与我分享它肯定知道的信息(哪些访问正在调用 getter,哪些调用正在调用 setter!)。
【解决方案2】:

在 Visual Studio 2019 中,可以使用“查找所有引用”功能按“种类”进行排序和过滤。 该功能是在 Microsoft 的 developercommunity forum 上请求的

带有“种类”列的“参考”窗口显示在最右侧,并以橙色框突出显示。

【讨论】:

  • 感谢您让我(和其他所有人)知道这已经改变了。看起来不错!
  • *** VS 2019 中的 ALSO:右键单击“set”关键字,例如w/i bool MyProp { get; set; } 现在只列出 setter :)
  • btw 今天我发现这种技术也可以通过使用默认不显示的定义列来过滤到特定的覆盖成员。见stackoverflow.com/a/64277632/981396
猜你喜欢
  • 2020-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
  • 1970-01-01
  • 2011-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多