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