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的主要内容,如果未能解决你的问题,请参考以下文章