2010-05-02 39 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