我刚刚开始在Visual Studio中使用ReSharper(在SO上的许多建议之后)。为了尝试一下,我打开了一个最近的ASP。NET MVC项目。我注意到它建议的第一件也是最频繁的事情之一是将我的大部分/所有显式声明改为var。例如:

//From This:
MyObject foo = DB.MyObjects.SingleOrDefault(w => w.Id == 1);
//To This:
var foo = DB.MyObjects.SingleOrDefault(w => w.Id == 1);

等等,即使是简单的类型,如int, bool等。

为什么推荐这个?我没有计算机科学或。net背景,最近“陷入”了。net开发,所以我真的很想了解正在发生什么,以及它是否有益。


当前回答

我只是想指出,在c#编码约定中推荐使用“var”

当变量的类型从赋值的右边很明显时,或者当精确的类型不重要时

所以这可能是ReSharper默认开启提示的原因。它们还提供了一些在同一文档的正下方不会提高可读性的情况。

其他回答

我个人倾向于关闭这个建议。使用var通常可以提高可读性;但正如您所提到的,它有时会减少它(使用简单类型,或当结果类型不明确时)。

我更喜欢选择什么时候用var,什么时候不用。但这只是我的看法。

没有技术上的区别(正如eWolf所指出的)。你可以使用其中一种,生成的CLR代码看起来是一样的。

在我看来,主要的好处是,这往往迫使您使用更好的变量命名。在你的例子中,'foo'是一个非常糟糕的变量名。

在ReSharper(8.02,但可能是其他版本)中,“使用隐式类型的局部变量声明”建议的选项可以根据您的偏好进行调整,不管它是什么,首先打开ReSharper的选项菜单:

然后,在“代码检查”下,通过调整所选语言的“检查严重性”,在我的例子中是c#:

正如你所看到的,有选项可以调整ReSharper提出的所有建议。希望这能帮助像我这样已经有“var”使用策略的人,只是想ReSharper尊重它:)

我只是想指出,在c#编码约定中推荐使用“var”

当变量的类型从赋值的右边很明显时,或者当精确的类型不重要时

所以这可能是ReSharper默认开启提示的原因。它们还提供了一些在同一文档的正下方不会提高可读性的情况。

ReSharper推荐var,因为它倾向于整理对象创建。

比较这两个例子:

StringBuilder bld = new StringBuilder();

var bld = new StringBuilder();

这只是一种简写,应该更容易阅读。

我认为,当你显式地用“new”创建新对象时,这很好。然而,在您的示例中,如果类没有正确命名,可能就不那么明显了。