Re-Sharper在什么假设下向我显示"Use implicitly typed local variable"信息?



在我的理解中,c#最初是一门静态语言,随着。net框架的一些增强,开始支持语言的动态特性。

我认为c#中的"var"关键字在运行时加载dll时非常强大,而且我们不知道将要加载的类型,它非常有帮助。

但是我认为它带来了确定变量类型的开销,如果变量在设计时被声明为var。现在,re-sharper负责通过做一些好的建议使我们的代码更漂亮,更干净,它给我的建议如下:

我的代码是这样的:

StatusResult result = new StatusResult();

Resharper建议它必须转换成

 var result = new StatusResult();

为什么?当我认为resharper的建议不是个好主意时,我为什么要相信它呢?或许是我错了?

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

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

var i = 0;中,i声明为intvar关键字仅表示编译器将在编译时推断变量类型。没有"设计时"类型推断开销,因为var i = 1;int i = 1编译成相同的指令集。

关于你的问题,

为什么?当我认为resharper的建议不是个好主意时,我为什么要相信它呢?

这是我的意见从我的经验。接受这个特殊建议的一些好处:

    它有助于重构,因为StatusResult只发生一次
  • 它缩短了行,并删除了一个多余的声明,这很容易被阅读代码的人推断出来
  • 编码
  • 时,输入更少,行写得更快
现在,如果这行代码是:
var result = GetStatusResult();  // A method call

我个人不会使用var,因为维护人员现在需要grok GetStatusResult()来查看var是什么。

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

作为旁注,正如Benesh在下面提到的,var != dynamic。我想这就是我受到坏名声的地方。加上我在上面提供的不使用它的例子中过度使用

相关内容

  • 没有找到相关文章

最新更新