2014-10-27 150 views
12

當您嘗試進行編譯:聲明匿名類型成員用一個簡單的名字

var car = new { "toyota", 5000 }; 

你將得到編譯器錯誤「無效的匿名類型成員聲明匿名類型成員必須與成員分配聲明。 ,簡單的名稱或成員訪問權限。「,因爲編譯器無法從相應的表達式中推斷出屬性的名稱。 這是完全意義上的。

讓我好奇的是,錯誤消息暗示了三種有效的方式來聲明類型成員。成員分配和成員訪問是顯而易見的:

// member assignment 
var v = new { Amount = 108, Message = "Hello" }; 

// member access 
var productQuery = 
    from prod in products 
    select new { prod.Color, prod.Price }; 

什麼是一個簡單的聲明的例子嗎?

谷歌搜索和SO的相關問題導致成員分配只有成員訪問的例子。

回答

12

據我所知,simple name聲明是這樣的:

var amount = 10; 
var whatever = "hello"; 

var newType = { amount, whatever } 

,它會自動創建一個匿名類型等於:

var newType = { amount = amount, whatever = whatever } 
+5

事實上,簡單的名字是從特定任期[ C#spec](http://msdn.microsoft.com/en-us/library/aa691350(v = vs.71).aspx)。 Quote:'一個簡單的名稱由一個標識符組成,可選擇後跟一個類型參數列表: simple-name: identifier type-argument-listopt '第158頁,來自C#5.0規範的** 7.6.2 **。 MSDN和語言規範有點不同步。 [規範](http://www.microsoft.com/en-us/download/confirmation.aspx?id=7029)給出了更深入的定義 – 2014-10-27 15:34:53

相關問題