【问题标题】:var vs explicit declaration [duplicate]var vs显式声明[重复]
【发布时间】:2011-05-01 03:13:57
【问题描述】:

可能重复:
Use of var keyword in C#

嗨, 刚换了工作,我已经习惯了经常使用var。 在我之前的工作中,我们做了很多 TDD 并使用 resharper。

在这项工作中,他们讨厌第三方工具,这里的开发人员说一直使用var 不好,而且效率不如显式键入。

前段时间我也是这么想的,但现在我已经习惯了,它让我的代码看起来更整洁。

我已经阅读了一些帖子,并且似乎对它是否有效感到困惑。 我读到使用var 会产生相同的IL 代码。那么它不应该那么高效吗?我在其他地方读到,即使使用var 产生相同的 IL 代码,它也必须找出它是什么类型。 那么“推断”到底是什么意思呢?

澄清一下它们在性能方面是否相同会很棒。

【问题讨论】:

  • “在这项工作中,他们讨厌第三方工具”,我曾经是其中之一,为了保持理智,用我的时间做更重要的事情,让代码管理更容易/更清洁和一致可以'不要使用 Resharper 或任何可以带来优势的第三方工具。只是讨厌使用某物并不是阻止其他人使用它的理由。

标签: c#


【解决方案1】:

就执行时间效率而言,没有区别。它确实被编译成完全相同的IL。变量仍然是静态类型的,只是类型是从初始化表达式中推断出来的。

“推断”是指“根据其他信息得出的”。所以如果声明是:

string x = "hello";

变量x明确声明为string类型。编译器不必解决任何问题。如果你使用var

var x = "hello";

然后编译器找到被赋值表达式的编译时类型,并使 that 成为变量的类型。 x 在代码中的其他任何地方仍然是已知的字符串变量。

如果与您合作的开发人员认为var 的行为是动态的,我会对他们告诉您的其他信息非常谨慎。您可能想谨慎地建议他们在评判新语言功能之前了解更多关于新语言功能如何工作的信息。

开发人员的效率而言,这是一个更难判断的问题。我个人使用var 相当 一点 - 特别是在测试中 - 但不是无处不在。

【讨论】:

  • 非常感谢您提供非常详细的答案。真的很感激。我不到处使用,只是让生活更轻松,正如您指出的那样,性能方面没有差异,那么为什么不呢。再次感谢您的时间
  • 那么说使用显式类型变量与使用 var 相比,编译 性能优势非常小,这是否正确? (运行时性能相同是有道理的。)
  • @Edgar:我不想谈论编译性能的好处。如果它们真的存在,我怀疑它们对于合理的代码是否是可测量的,而且我不想在没有任何证据的情况下预测收益会走向何方。
  • @rbmanian75:这也建议使用单字符变量名。在谈到“资源使用”时,磁盘上源代码的大小几乎从来都不是一个重要因素。效率与执行速度等有关,而不是源代码在磁盘上占用多少空间。
  • @rbmanian75:“变量名由编码者决定”——决定是否使用var。不过,我并没有活在过去。我生活在一个存储在磁盘上的单个图像 可能与更改为对数十万个声明使用隐式类型变量具有相同影响的世界中。如果为了节省磁盘空间而对var 的数十万次使用导致甚至一个需要调查的错误,那么这可能需要比节省的所有资源更多的资源。忘记磁盘空间:代码可读性。
【解决方案2】:

varcompilation 期间转换为精确类型。据我所知,效率没有问题。

此代码的IL如下所示:

class Foo
    {
        void Bar()
        {
            var iCount = 0;
            int iCoount1 = 0;
        }
    }

【讨论】:

  • 这里用来将二进制IL转换为字符串代码的软件叫什么。
猜你喜欢
  • 2011-10-28
  • 2013-07-28
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
  • 2010-11-08
  • 1970-01-01
  • 2015-11-12
相关资源
最近更新 更多