Re-Sharper在什么假设下向我显示"使用隐式类型的局部变量"信息?

时间:2014-03-27 23:54:33

标签: c# .net resharper dynamic-languages static-language

在我的理解中,C#以静态语言开始,并在.NET框架中进行了一些增强,并开始支持语言的动态特性。

我认为" var" c#中的关键字在运行时加载DLL时非常强大,而且我们不知道类型的方式,它非常有用。

但我认为如果变量在设计时被声明为var,则会带来确定变量类型的开销。现在,通过做一些不错的建议,重新锐化,这有助于使我们的代码更好,更干净,建议我如下:

我的代码如下所示:

StatusResult result = new StatusResult();

Resharper建议必须将其转换为

 var result = new StatusResult();

为什么?当我认为这不是一个好主意时,为什么我应该购买resharper的建议呢?或者可能是我错了?

2 个答案:

答案 0 :(得分:4)

这主要是基于意见的问题,但有一个问题值得解决: 区分类型推断和动态类型是非常重要的。

dynamic i = 0;中,i被声明为动态变量,其类型仅在运行时解析。这可能会导致开销。

var i = 0; i中将声明为int var关键字仅表示编译器在编译时推断出变量类型。由于var i = 1;int i = 1编译为同一组指令,因此没有“设计时”类型推断开销。它与动态类型无关。

答案 1 :(得分:3)

关于你的问题,

  

为什么?当我认为这不是一个好主意时,为什么我应该购买resharper的建议呢?

根据我的经验,这是我的意见。有些人接受这个特别的建议:

  • 它有助于重构,因为StatusResult只发生一次
  • 它缩短了行并删除了一个冗余声明,这个声明很容易被读取代码的人推断
  • 输入次数较少,编码时写入的行更快

现在,如果代码行是:

var result = GetStatusResult();  // A method call

我个人不会使用var,因为维护者现在需要了解GetStatusResult()以查看var是什么。

在一天结束时,这是个人决定,除非您必须遵循编码标准,在这种情况下,您应该游说改变标准或者只是同意它。

作为旁注,正如Benesh在下面提到的那样,var!= dynamic。我认为这是var变得糟糕的说法。加上我在上面提供的不使用它的例子中的过度使用。