What is the exact use of var keyword?
Possible Duplicate:
Use of var keyword in C#
在与同事讨论了C 3中"var"关键字的使用后,我想知道人们对通过var进行类型推断的适当使用有什么看法?
例如,在有问题的情况下,我相当懒惰地使用var,例如:-
1 2 3 | 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的更多合法用途如下:
1 2 |
有趣的是,Linq似乎有点灰暗,例如:-
1 2 | var results = from r in dataContext.SomeTable select r; // Not *entirely clear* what results will be here. |
很明显,结果会是这样的:它将是一个实现IEnumerable的类型,但是它并不像声明新对象的var那样完全明显。
当涉及到对象的linq时,情况更糟,例如:-
1 2 3 | var results = from item in someList where item != 3 select item; |
这并不比
这里真正关心的是类型安全性——例如,如果我们将查询结果放入一个接受
就我个人而言,我发现您所描述的情况完全没有问题,因为重复自己没有意义,除非您特别希望变量的静态类型与用于初始化变量的表达式的静态类型不同。例如:
1 |
此外,
据我所知,
这只是减少操作次数的一个技巧。例如,当您在一个类中更改类型时,这可能导致一系列修改。但它只是一种将工作从程序员迁移到编译器的方法。
例如,您的LINQ查询将产生一个
只需要一个"抽象"或"语法糖",就可以在不首先指定类型的情况下编写代码(这不是第一种情况)
在第二种情况下:用linq查询来获取一些未知的、动态的、非具体的(如果您愿意的话)类型。
可以是:
1 2 3 | var results = from item in someList where item != 3 select item; //item a class instance |
可以是
1 2 3 | var results = from item in someList where item != 3 select item.ItemName; //string property of that class |
可以是
1 2 3 | var results = from item in someList where item != 3 select new {item.ItemName, item.ID}; //unknown type dynamically generated, that conains the string and integer, like result |
var关键字在语言中用作速记,但不是.NET类型。编译器必须知道使用
我个人只在类型名也用于分配并且名称可能太长而无法在代码中复制时使用它。
1 |
它也用于匿名类型(但编译器必须知道匿名类型的签名)。
1 |
此方法通常用于LINQ查询的SELECT子句中。
在我确定要使用哪种数据类型之前,我只是将它用作位置保持器。
当然,这是一个简短的答案,但我认为当您应该使用var关键字时,这个答案非常接近。