Resharper:vars

Posted

技术标签:

【中文标题】Resharper:vars【英文标题】:Resharper: vars 【发布时间】:2010-09-22 17:53:21 【问题描述】:

为什么 Resharper 想让你将代码中的大多数变量改为 var 类型而不是实际类型?

【问题讨论】:

【参考方案1】:

这只是一种选择。您可以禁用它:

ReSharper -> 选项 -> 代码检查 -> 检查严重性 -> 代码冗余 -> 尽可能使用“var”关键字:将其更改为“不显示”

还有上下文(灯泡)选项,它将带您进入各个方向 - 这是在 ReSharper -> 选项 -> 语言 -> C# -> 上下文操作 -> “用 'var' 替换显式类型声明”下

【讨论】:

我猜根据您对 Resharper 的了解,您认为值得授权价格吗? 绝对。我喜欢它。再说一次,对于我作为 MVP 的许可价格是 0 美元,所以我有偏见;) 使用 ReSharper 6,我在 ReSharper > 选项 > 代码检查 > 检查严重性 > 语言使用机会 > 尽可能使用“var”关键字下找到了这个。将其设置为“不显示”。 这个选项虽然对学习新的语言特性很有用,但对于遵循它的新程序员来说可能是坏事,让一切都变了!也许这应该默认关闭。【参考方案2】:

我看到了一个来自 Hadi Hariri 的视频,他在那里展示了 Resharper 6.x。他的理由是,如果你强迫用户使用“var”,你实际上是在强迫他以更有意义的方式命名变量,这样所有名称都可读且更有意义。

【讨论】:

【参考方案3】:

默认情况下,它会“绿色曲线”这种类型的声明:

Person p = new Person();
^^^^^^

因为重复。

在可以推断的时候还会提示(绿色小下划线)var:

Person p = repository.GetPerson(1);
¯¯¯

在这种情况下,可以根据 GetPerson 方法的返回类型来推断它。

正如 Jon Skeet 所说,您可以在 resharper 的选项中禁用这些建议。

【讨论】:

【参考方案4】:

回答您的问题......因为 JetBrains 的某个人认为这是“首选”方式。

要更改它,请按照 Jon 的回答。此外,您还可以在 ReSharper 选项的代码清理部分下进行代码清理(我经常使用)时更改 ReSharper 的行为。设置为“使用显式类型”。

【讨论】:

这是我唯一不喜欢 Resharper 的东西,开箱即用。 IMO 它促进了糟糕的编程......但 var vs !var 是一场宗教战争......所以每个人都有自己的。 @Pure.Krome ,我同意,但 floatingmarbles 的答案实际上有点道理 :)。它会迫使你有一个有意义的名字......如果我能改掉我写作的坏习惯:var v = ... :)【参考方案5】:

这是 JetBrains 代码检查 wiki 上关于它的解释: http://confluence.jetbrains.net/display/ReSharper/Use+%27var%27+keyword+when+initializer+explicitly+declares+type

如果您在右侧看到类,则无需在左侧也看到它。如果类名很长,它也可以节省空间并减少代码。就我个人而言,我不将 var 用于字符串、int 等简单类型,但将其用于 var dictionary = new Dictionary<string, int>() 之类的东西以节省空间。

【讨论】:

【参考方案6】:

我认为它建议你两种方式。 如果您有明确的类型 - 您可以将其更改为 var。如果您有 var - 可以将其更改为显式。只是为了让你更快地改变,如果你认为它当然是合适的。

使用 vars 可能会很好,例如,循环变量,迭代集合时,等等,当类型对你来说是“隐式”时(当然,当 Resharper 建议它时,它对于编译器总是隐式的)并且它的缺失不会降低代码的可读性。 另外,我喜欢它来缩短一些声明,这些声明可能会随着泛型而变得很长。 就像,如果您在作业的左侧写“var”,IList(IDictionary(SomeType)) myVar = List(IDictionary(SomeType)) () 不会松动太多。

(用尖括号代替括号;)

当然,我会尝试谨慎使用 var,以提高可读性,反之亦然。

【讨论】:

(如果包含在反引号中,可以使用尖括号)SomeCode<int>. 转换为显式类型只是一个上下文操作(至少在我的 R# 5.1.3 中)。因此,JetBrains 似乎更喜欢“vars”。但这对我来说没关系,因为我不太看建议。【参考方案7】:

对我来说,这绝对物有所值……(即使我必须自己付钱)。 但它可以减慢你的VS。 如果你有 5000 行代码之类的文件,它会变得非常慢。

但我仍然不明白为什么我是团队中唯一使用它的人...

【讨论】:

是的,我很期待下一个版本,它应该以性能为中心。另外,我也是:) 一个包含 5000 行代码的文件 - 哇。听起来可能需要进行一些重构。顺便说一句,您可以通过定义部分类来拆分代码文件。 实际上我有一个 6000 的。部分课程无济于事 - DNA :)【参考方案8】:

变量有助于使方法内的代码更具可读性,尤其是在您使用泛型时。

正如乔恩所说,这只是一种选择。

【讨论】:

并非在所有情况下。考虑示例Status satus = foo.DoSomething()。用var 编写它会隐藏实际的返回类型并使其更不可读。 status 可以是任何东西,例如 int。

以上是关于Resharper:vars的主要内容,如果未能解决你的问题,请参考以下文章

C++ 的 ReSharper [关闭]

ReSharper 配置及用法(ZHUANG)

Resharper:vars

Resharper:vars

resharper 8.1

Resharper:代码样式共享 - 强制执行