【问题标题】:Is Resharper correct?Resharper 是否正确?
【发布时间】:2010-11-20 21:45:37
【问题描述】:

我刚刚安装了 Reshaper 4.5,它提出了以下建议:

return this.GetRuleViolations().Count() == 0; -- REMOVE this.

new string[] { this.ID.ToString(), this.Registration } -- REMOVE string, MAKE ANONYMOUS TYPE

int i = Method.GetNumber(); -- REPLACE int WITH var

我应该这样做吗?

我认为在某些情况下它会降低代码的可读性,但会提高性能吗?进行这些更改有什么好处?

谢谢

【问题讨论】:

  • 只有一首 Rigobert Song。请务必在此论坛上查看此子问题的各种重复出现。
  • 尝试安装 StyleCop 和 StyleCop-for-ReSharper,这将为您提供 Microsoft 推荐的编码风格指南。不过,您需要调整 R# 的规则以匹配。至于 var 的使用,我们总是在内部使用它,因为我们认为它有助于提高可读性 - 类型是针对编译器的,而不是人类的。
  • 嗯。我一直使用这种类型——我想我觉得你应该知道你从你的 lambda 表达式中得到了什么,如果你直接指定它会有所帮助。
  • 与您的问题无关,但使用 Any() 而不是 Count() == 0 是更好的选择,因为后者可能必须枚举整个集合来告诉您它是否为空。

标签: c# .net coding-style


【解决方案1】:

1) 显式this 指针仅在引用不明确时才需要。由于GetRuleViolations 是在类型上定义的,因此您很可能不需要this

这里的另一点是,如果GetRuleViolations 返回一个IEnumerable 的东西,你通常会更好地使用Any() 而不是Count() == 0,因为你冒着枚举整个序列的风险。

2) 可以从初始化中推断出字符串。

3) Resharper 更喜欢var 而不是特定类型。

【讨论】:

    【解决方案2】:

    除了你的小方块变绿的明显好处之外,如果你正在编写稍后将由其他人维护的代码,那么在编码语法中不要使用你的个人偏好是很有意义的。 Resharper 在格式化代码方面变得非常有用,这种方式可以被广泛的受众识别。

    我属于那种认为谁的方法正确并不重要的思想流派。如果我们都坚持一个模式,我们都会发现阅读彼此的代码会更容易。

    所以,在我看来,不要更改默认的锐化器设置。只需接受,如果您使用默认设置,您可以让每个人的生活变得简单。

    【讨论】:

    • 我同意您使用默认工具的观点。不幸的是,据我所见,我不喜欢 Resharper 的默认设置
    • 由于安全性,我总是将 resharper 的 'var' 设置更改为显式类型。可读性很好,但在有人重构后可能会造成严重损害。
    【解决方案3】:

    我认为第一个是为了这个目的,如果你想让“GetRuleViolations()”成为一个静态方法。那么您不必删除“this”标识符。

    【讨论】:

      【解决方案4】:

      对于第三个 - 最让我烦恼的一个。它为读者提供的信息更少,我认为这只是炫耀一个新功能的问题。

      我会说 - 当你知道返回类型时使用 var 并在你不喜欢这样的时候使用正确的对象类型:

      var reader = new XmlReader(....  // Implicit
      XmlReader reader = SomeClass.GetReader() // Explicit when you can't be sure
      

      【讨论】:

        【解决方案5】:

        第一个:Resharper 询问是否删除this,这对我来说只是一种风格。仅此而已,保留它不会以任何方式损害性能。这只是可读性的问题。

        对于第二个和第三个:Resharper 通常更喜欢使用var 而不是特定的数据类型,这就是建议的原因。我相信这是个人选择的问题,除了可读性之外没有其他好处。

        【讨论】:

          【解决方案6】:

          第一个对我来说似乎不清楚。只要没有歧义,您通常不必在 this. 前面加上前缀,我无法从这个例子中看出这一点。 Resharper 可能是对的。其他两个不会提高性能,编译结果是一样的。这只是口味问题,当然还有您的编码指南。

          【讨论】:

            【解决方案7】:

            第一个应该是可配置的。据我记得,你可以告诉 ReSharper 你是否想要“这个”。仅在字段、方法前面,两者都有或没有。

            使用“var”不会改变生成的 CIL 代码中的任何内容,因此性能将保持不变。我已经有一段时间没有使用 ReSharper,也不知道为什么它会如此积极地推广匿名类型,但是“var”的一个优点是它更能抵抗更改。

            意思是,如果您调用包装器而不是调用 Method.GetNumber(),例如。 Filter(Method.GetNumber()) 在返回 Nullable 的同一行中,您不必更新变量的类型。

            【讨论】:

              【解决方案8】:

              这些都不会对性能产生任何影响,只会影响可读性。

              我发现建议 1 和 2 的可读性更高,而建议 3 的可读性低于原始代码。

              但是,如果您发现这些建议的可读性较差或违反了您公司的代码样式标准,则您不必只遵循这些建议。当您将光标放在波浪线上时,按 Alt-Enter 以显示上下文操作列表。其中之一是改变检查的严重程度;您根本无法显示它或将其显示为提示。您可以在 ReSharper | 找到完整的检查列表。选项 |代码检查 |检查严重性

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2011-07-30
                • 1970-01-01
                • 2018-07-24
                • 2011-07-01
                • 2023-03-03
                • 1970-01-01
                相关资源
                最近更新 更多