类型推断变量

时间:2012-11-15 14:42:09

标签: c# types var variant

类型推断使用var关键字。编译器通过变量初始化的内容“推断”变量的类型 例如var somenum = o; 变成int somenum = 0;

即使 somenum 永远不会被声明为int,编译器也会想到这一点。只要它在范围内,somenum就是int

就像variant中使用的visual basic类型一样。在程序中使用它,在某种程度上会降低性能和性能。在3.5之前的网络框架中不包含var

即使它降低性能也会降低dot net framework支持强类型检查,为什么var包含在框架3.5中?

var紫罗兰强类型检查?如果不是如何?

5 个答案:

答案 0 :(得分:6)

var根本不会降低性能。该变量仍为strongly typed

  

隐式类型的局部变量是强类型的,就像你一样   我自己声明了类型,但编译器确定了类型。

唯一的区别是您不必手动拼出源代码中的类型。 VB 6的Variant根本没有任何关系,如果这就是你所指的。

答案 1 :(得分:4)

它根本不像Variant,并且不会降低性能。

在.NET中,var由编译器提供为速记机制;编译后的代码就像你声明了正确的类型一样强类型。

答案 2 :(得分:1)

什么?不,哇,你错了。

C#的var 没有就像VB的Variant一样,C#中的dynamic(或多或少)。

var只是编译器在编译程序时填写的占位符,在运行时实际类型已完全声明和使用,因此绝对没有性能损失。

// this won't work
var i=0;
i="a"; // it would with dynamic though!

答案 3 :(得分:1)

var有助于出于几个原因,它减少了代码的冗长性,并允许更容易的重构,当一个类型在分配给变量的方法的输出上发生变化时,如果它仍然满足使用,则不需要进行任何更改。

此外,没有性能命中,因为它被编译到IL,它以相同的方式结束。

答案 4 :(得分:1)

var不会降低性能,但仍然是强类型的。

之所以引入它是因为它对LINQ是必要的,因为LINQ能够返回“anonymous types”。 这是引入此关键字的主要原因,因为您无法控制将由编译器生成的类型的名称。 一个附加值是,你可以使用它作为语法糖,在声明一个变量时不复制变量的类型:

var = new List<MyComplexType<WithTypeParameter>>();

而不是:

List<MyComplexType<WithTypeParameter>> x = new List<MyComplexType<WithTypeParameter>>();

例如。

无论如何,var不像Visual Basic中的Variant数据类型。将某个实例分配给已使用var关键字声明(并初始化)的变量时,不能为其分配其他类型的实例。 除此之外,您无法在不初始化的情况下声明'var'变量。