var
在以下情况下的确会做什么?var in linq的使用
var productInfos =
from p in products
select new { p.ProductName, p.Category, Price = p.UnitPrice };
var
在以下情况下的确会做什么?var in linq的使用
var productInfos =
from p in products
select new { p.ProductName, p.Category, Price = p.UnitPrice };
var
为占位符编译器创建的("anonymous") type具有三个属性,ProductName
,Category
和Price
。
它不是一个变体(例如在Visual Basic中)。它是一种具体的类型,可以在代码中的其他地方使用。
变量与var是隐式类型化的局部变量,它们是强类型的,就像您自己声明了类型一样,但编译器确定类型。它会得到结果的类型。
和口碑不错的阅读C# Debate: When Should You Use var?
这里另一个C# 3.0 Tutorial
它简化您不必手动声明你的查询结果的确切类型的疼痛。但我必须同情,这不是动态类型:productInfos
变量将具有静态类型,但它由编译器而不是您创建。
在这种特殊情况下,productInfos的类型是编译器生成的Anonymous Type,包含3个属性ProductName,Category和Price。
的两行:
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
将由编译因此它不可能为你声明有类型的变量产生。这是一个很好的答案,但不是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
VAR =程序员友好=更少的输入=让你懒(另一个看它的方式)=带来默默无闻到代码,如果新的3.5 FW
var为变量,它不具有任何数据类型。你可以在var变量中存储任何东西。 – Xulfee 2010-05-11 08:15:45