2010-05-02 78 views
8

var在以下情况下的确会做什么?var in linq的使用

var productInfos = 
from p in products 
select new { p.ProductName, p.Category, Price = p.UnitPrice }; 
+0

var为变量,它不具有任何数据类型。你可以在var变量中存储任何东西。 – Xulfee 2010-05-11 08:15:45

回答

7

var为占位符编译器创建的("anonymous") type具有三个属性,ProductNameCategoryPrice

它不是一个变体(例如在Visual Basic中)。它是一种具体的类型,可以在代码中的其他地方使用。

0

它简化您不必手动声明你的查询结果的确切类型的疼痛。但我必须同情,这不是动态类型:productInfos变量将具有静态类型,但它由编译器而不是您创建。

4

在这种特殊情况下,productInfos的类型是编译器生成的Anonymous Type,包含3个属性ProductName,Category和Price。

9

的两行:

var productInfos = from p in products 
select new { p.ProductName, p.Category, Price = p.UnitPrice }; 

IEnumerable<CompilerGeneratedType> productInfos = from p in products 
select new { p.ProductName, p.Category, Price = p.UnitPrice }; 

是等价的。 CompilerGeneratedType是一个将由编译器创建并具有三个公共属性ProductName, Price, and Category的类型。 var是有帮助的,原因有二:

  1. CompilerGeneratedType将由编译因此它不可能为你声明有类型的变量产生。
  2. 您不必过多考虑结果的集合类型。 Linq可以做到这一点,你不必担心它。
+2

这是一个很好的答案,但不是100%正确。很有可能参考CompilerGeneratedType。不是直接按名称,而是间接地。例如:var test = new {P1 =“Hello”,P2 =“Bye”};类型t = test.GetType();产生一个具体名称的具体类型,在我的具体示例中UnderlyingSystemType:{<> f__AnonymousType0'2 [System.String,System.String]}。 – 2010-05-02 18:18:08

2

VAR =程序员友好=更少的输入=让你懒(另一个看它的方式)=带来默默无闻到代码,如果新的3.5 FW