我刚刚安装了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
我应该这样做吗?
我认为在某些情况下,它会降低代码的可读性,但会提高性能吗?做出这些改变有什么好处?
由于
答案 0 :(得分:12)
1)只有当引用不明确时,才需要显式this
指针。由于GetRuleViolations
是在类型上定义的,因此您很可能不需要this
。
此处的另一点是,如果GetRuleViolations
返回某个IEnumerable
的内容,那么使用Any()
代替Count() == 0
通常会更好,因为您冒险计算整个序列
2)可以从初始化推断出字符串。
3)Resharper更喜欢var
特定类型。
答案 1 :(得分:3)
除了您的小方块绿色的明显好处之外,如果您正在编写将由其他人稍后维护的代码,那么在编码语法中不使用您的个人偏好是很有意义的。 Resharper在以非常广泛的受众可识别的方式格式化代码方面变得非常有用。
我属于思想学派,认为谁的方式是对的并不重要。如果我们都坚持一个模式,我们都会发现更容易阅读彼此的代码。
所以,在我看来,不要更改默认的resharper设置。只要接受,如果你使用默认值,你就会让每个人的生活变得简单。
答案 2 :(得分:2)
对于第三个 - 最让我烦恼的那个。它为读者提供了更少的信息,我认为这只是展示新功能的问题。
我会说 - 当你知道返回类型时使用var并在你不喜欢的时候使用正确的对象类型:
var reader = new XmlReader(.... // Implicit
XmlReader reader = SomeClass.GetReader() // Explicit when you can't be sure
答案 3 :(得分:1)
我认为第一个是出于此目的,如果你想让“GetRuleViolations()”成为静态方法。然后你不必删除“this”标识符。
答案 4 :(得分:0)
第一个:Resharper要求删除this
这对我来说只是一种风格。没有更多,保持它不会以任何方式损害性能。这只是一个可读性问题。
对于第二个和第三个:Resharper通常更喜欢使用var
而不是特定的数据类型,这就是建议的原因。我认为这是个人选择的问题,除了可读性之外没有任何额外的收获。
答案 5 :(得分:0)
第一个似乎对我不清楚。只要没有歧义,您通常不必加前缀this.
,这个例子我无法分辨。 Resharper可能是对的。另外两个不会提高性能,编译结果也会一样。这只是一个品味问题,当然还有您的编码指南。
答案 6 :(得分:0)
第一个应该是可配置的。据我所知,你可以告诉ReSharper你是否想要“这个”。只在领域,方法,两者或没有。
使用“var”不会改变生成的CIL代码中的任何内容,因此性能将保持不变。我有一段时间没有使用过ReSharper,我不知道为什么它会如此积极地推广匿名类型,但“var”的一个优点是它更能抵抗变化。
这意味着,如果不是调用Method.GetNumber(),而是调用了一个包装器,例如。在返回Nullable的同一行中过滤(Method.GetNumber()),您不必更新变量的类型。
答案 7 :(得分:0)
这些都不会对性能产生任何影响,仅的可读性。
我发现建议1和2更具可读性,并且比原始代码的可读性低3。
但是,如果您发现它们的可读性较差或违反了公司的代码风格标准,则您无需遵循这些建议。将光标放在波浪线上时,按Alt-Enter显示Contex Actions列表。其中之一就是改变检查的严重程度;您根本无法显示它或将其显示为提示。您可以在 ReSharper |找到完整的检查列表选项|代码检查|检查严重性。