var关键字的确切用法是什么?

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

在与同事讨论在C#3中使用'var'关键字之后,我想知道人们对通过var?进行类型推断的适当用法有何看法?

例如,我比较懒惰地在可疑情况下使用var,例如: -

foreach(var item in someList) { // ... } // Type of 'item' not clear.
var something = someObject.SomeProperty; // Type of 'something' not clear.
var something = someMethod(); // Type of 'something' not clear.

var更合理的用法如下:

var l = new List<string>(); // Obvious what l will be.
var s = new SomeClass(); // Obvious what s will be.

有趣的是LINQ似乎有点灰色地带,例如: -

var results = from r in dataContext.SomeTable
               select r; // Not *entirely clear* what results will be here.

很明显,结果将会是一种实现IEnumerable的类型,但是它与声明一个新对象的var的方式并不完全相同。

当涉及到LINQ到对象时更糟,例如: -

var results = from item in someList
              where item != 3
              select item;

这并不比equivilent foreach(var item in someList) { // ... } equivilent更好。

这里有一个关于类型安全的真正问题 - 例如,如果我们要将查询的结果放入一个接受IEnumerable<int>IEnumerable<double>的重载方法中,调用方可能会无意中传入错误的类型。


就我个人而言,我发现你描述的情况远没有问题,因为除非特别想让变量的静态类型与用于初始化变量的表达式的静态类型不同,否则没有必要重复自己。 例如:

IEnumerable<int> foo = new List<int>(); // It's IEnumerable on purpose

此外, var绝对没有类型安全问题 。 重点不在于变量可以是“任何”类型。 它是一个非常具体的类型,但你根本不在意拼出那个类型。


我只使用它作为占位符,直到我确定了我正在使用的数据类型。

当然,这是一个简短的答案,但我认为这很接近,当你应该使用var关键字。


var关键字在语言中用作简写,但不是.NET类型。 编译器必须知道使用var关键字的变量类型 - 因此它类型安全的。

我个人仅在分配中使用类型名称时才使用它,并且名称可能太长而无法在代码中复制。

var dictionary = new Dictionary<string, string>();

它也用于匿名类型(但仍然是,编译器必须知道匿名类型的签名)。

var fred = new { Age = 23, Name = "Fred" };

此方法在LINQ查询的select子句中通常使用。

链接地址: http://www.djcxy.com/p/9115.html

上一篇: What is the exact use of var keyword?

下一篇: How would you implement the IEnumerator interface?