var vs explicit声明

use*_*969 17 c#

可能重复:
在C#中使用var关键字

嗨,刚刚搬了工,我已经习惯var了很多.在我以前的工作中,我们做了大量的TDD和使用resharper.

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

前段时间我想的一样,但现在我已经习惯了它,它使我的代码看起来更整洁.

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

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

Jon*_*eet 42

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

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

string x = "hello";
Run Code Online (Sandbox Code Playgroud)

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

var x = "hello";
Run Code Online (Sandbox Code Playgroud)

然后编译器发现被分配表达式的编译时类型,并且使变量的类型.x仍然知道代码中的其他地方都是字符串变量.

如果您正在使用的开发人员认为var其动态行为,我会非常谨慎地告诉您其他信息.在判断新语言功能之前,您可能需要谨慎地建议他们更多地了解新语言功能的工作原理.

开发人员效率而言,这是一个更难判断的问题.就个人而言,我使用了var 很多 - 特别是在测试中 - 但并非到处都是.


ani*_*key 9

varcompilation根据我的知识,在效率问题上没有转换为精确类型.

此代码的IL如下所示:

class Foo
    {
        void Bar()
        {
            var iCount = 0;
            int iCoount1 = 0;
        }
    }
Run Code Online (Sandbox Code Playgroud)

替代文字