5

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

即使somenum从未被声明为 an int,编译器也会计算出这一点,并且 somenumint只要它在范围内,它就是 an 。

它就像variant中使用的类型visual basic。在程序中使用它,在某种程度上会降低性能var并且在 3.5 之前不包含在 dot net 框架中。

即使它降低了性能和点网框架支持强类型检查,为什么var包含在框架 3.5 中?

var紫罗兰强类型检查?如果不是怎么办?

4

5 回答 5

6

var根本不会降低性能。该变量仍然是强类型

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

唯一的区别是您不必在源代码中手动拼出类型。Variant如果这就是您所指的,则与 VB 6 完全没有关系。

于 2012-11-15T14:44:16.660 回答
4

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

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

于 2012-11-15T14:45:36.170 回答
1

什么?不,哇,这一切都错了。

C#varVB 完全不同,Variantdynamic在 C# 中(或多或少)。

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

// this won't work
var i=0;
i="a"; // it would with dynamic though!
于 2012-11-15T14:46:00.210 回答
1

var 之所以有用,有几个原因,它减少了代码的冗长,并且允许更轻松地重构,当分配给变量的方法的输出上的类型发生更改时,如果它仍然满足用法,则不需要更改。

也没有性能影响,因为它被编译到 IL 并最终以相同的方式结束。

于 2012-11-15T14:46:42.423 回答
1

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

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

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

代替:

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

例如。

无论如何,var 与 Visual Basic 中的 Variant 数据类型不同。当您将某个实例分配给已使用 var 关键字声明(和初始化)的变量时,您无法为其分配另一种类型的实例。除此之外,你不能在不初始化的情况下声明一个“var”变量。

于 2012-11-15T14:47:07.337 回答