var
在以下情况下真正做了什么?
var productInfos =
from p in products
select new { p.ProductName, p.Category, Price = p.UnitPrice };
答案 0 :(得分: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
有两个原因:
CompilerGeneratedType
将由编译器生成,因此您无法在声明中使用类型名称。答案 1 :(得分:7)
var
是编译器创建的("anonymous") type的占位符,其中包含三个属性ProductName
,Category
和Price
。
它不是变体(例如在Visual Basic中)。它是一种具体类型,可以在代码中的其他位置使用。
答案 2 :(得分:4)
在这种特殊情况下,productInfos的类型是编译器生成的Anonymous Type,具有3个属性,ProductName,Category和Price。
答案 3 :(得分:3)
变量是隐式类型的局部变量,它们是强类型的,就像你自己声明了类型一样,但编译器确定了类型。它得到了结果的类型。
这里有一个很好的阅读C# Debate: When Should You Use var?
这里是另一个C# 3.0 Tutorial
答案 4 :(得分:2)
var = programmer friendly = less typing =让你变得懒惰(另一种看待它的方式)=如果新的3.5 FW
,则会给代码带来模糊性答案 5 :(得分:0)
它使您免于必须手动声明查询结果的确切类型。但我必须同情,这不是动态类型:productInfos
变量将具有静态类型,但它是由编译器而不是您创建的。