【问题标题】:Resharper no warning for "parameter never used"Resharper 没有警告“从未使用过的参数”
【发布时间】:2015-06-24 10:50:01
【问题描述】:

我想知道为什么 resharper 不会为公共方法的未使用方法参数生成“参数'aaa'从未使用”类型的警告:

如果您将 resharper 配置为执行“解决方案范围分析”,则警告会同时显示在私有和公共方法上:

知道原因吗?是bug吗?

【问题讨论】:

  • 可能是因为没有解决方案范围的分析,ReSharper 不能声称没有在指定此参数的其他程序集中调用公共方法?
  • @Andrei:但这不是关于方法的使用,而是名称为unused的未使用参数。所以这个方法用不用都无所谓。 confluence.jetbrains.com/display/ReSharper/…
  • 即使在当前解决方案中没有使用,也可以在其他解决方案中使用。我认为,这就是 Resharper 默认不将其标记为未使用的原因。
  • @TimSchmelter,我对此表示怀疑。 ReSharper 应该足够聪明,不会建议删除可能导致编译错误的内容。另外,想象一下电话Do2("some string")。你会说这里使用了参数吗?我会
  • @TimSchmelter 这是一个帮助你重构代码的工具。创建错误不是有效的重构。

标签: c# resharper


【解决方案1】:

从方法中删除参数是一项重大更改,因此不能仅仅因为当前未使用参数而将其删除。对于private 方法,唯一需要查看的范围是相关类。当方法公开时,工具不一定知道是否真的可以删除参数。如果它可以查看整个范围,它可以确定该方法是否实际在类之外使用,从而确定重构该方法是否可行。

【讨论】:

  • 但是如果使用这种方法有什么关系呢?警告应该告诉您该参数似乎没用。因此,即使某些代码使用该参数调用此方法,它也可能是一个错误,因为未使用该参数。
  • @TimSchmelter 这很重要,因为如果使用该方法,那么删除参数将破坏使用该方法的所有代码。将编译解决方案变成无法编译的解决方案不是有效的重构,因此不建议这样做。
  • 在第二种情况下(启用解决方案范围分析),即使在解决方案中的某处调用公共方法,警告仍然存在:因此这意味着此警告仅与方法的主体有关(如@Andrei 上面说过)。在“解决方案范围分析”中,resharper 不处理对此方法的调用,那么如果“解决方案范围分析”被禁用,为什么 resharper 还要这样做呢?
  • @jeromerg "solution wide" 本质上的意思是 "R#,这是一组自包含的类" - 所以 R# 现在可以安全地假设如果不使用参数,那么解决方案范围的重构将不会中断任何依赖于该方法的代码(因为您基本上指示 R# 没有其他调用代码)。详情可见R# Solution-wide analysis
  • @AlexeiLevenkov 好点!考虑到这一点,我可以理解 resharper 识别这两种情况的原因!
猜你喜欢
  • 2011-02-16
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
相关资源
最近更新 更多