var vs explicit声明

时间:2010-10-27 06:13:49

标签: c#

  

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

您好, 刚搬到工作岗位,我已经习惯了var。 在我以前的工作中,我们做了大量的TDD和使用resharper。

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

前段时间我的想法一样,但现在我已经习惯了,这让我的代码看起来更整洁。

我已经阅读过一些帖子,但是它是否有效率似乎存在混淆。 我读到使用var生成相同的IL代码。它应该不那么有效吗?在其他地方,我读到即使使用var产生相同的IL代码,它也必须找出它是什么类型。 那么“推断”究竟意味着什么?

关于性能是否相同的一些澄清将是非常棒的。

2 个答案:

答案 0 :(得分:38)

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

“推断”是指“根据其他信息制定”。因此,如果声明是:

string x = "hello";

变量x 显式声明为string类型。编译器不需要做任何事情。如果您使用var

var x = "hello";

然后编译器找到所分配表达式的编译时类型,并使 变量的类型。 x仍然是代码中其他地方的字符串变量。

如果与您合作的开发人员认为var动态行为,我会对他们告诉您的其他信息非常谨慎。您可能需要谨慎地建议他们在判断新语言功能之前如何学习它们。

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

答案 1 :(得分:9)

var期间,

compilation被转换为确切类型。根据我的知识,效率没有问题。

此代码的IL如下所示:

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

alt text