2009-10-11 24 views
35

這段代碼片段有什麼問題?C#匿名類型不能分配到 - 它是隻讀的

class Program 
{ 
    static void Main(string[] args) 
    { 
     var obj = new { Name = "A", Price = 3.003 }; 

     obj.Name = "asdasd"; 
     obj.Price = 11.00; 

     Console.WriteLine("Name = {0}\nPrice = {1}", obj.Name, obj.Price); 

     Console.ReadLine(); 
    } 
} 

我收到以下錯誤:

Error 5 Property or indexer 'AnonymousType#1.Name' cannot be assigned to -- it is read only .....\CS_30_features.AnonymousTypes\Program.cs 65 13 CS_30_features.AnonymousTypes 
Error 6 Property or indexer 'AnonymousType#1.Price' cannot be assigned to -- it is read only .....\CS_30_features.AnonymousTypes\Program.cs 66 13 CS_30_features.AnonymousTypes 

如何重新設定值到一個匿名類型的對象?

回答

48

匿名類型在C#是不可改變的,因此不具有財產setter方法。你需要的價值觀

obj = new { Name = "asdasd", Price = 11.00 }; 
+18

還有一點要注意的創建一個新的anonmyous類型是,如果新的匿名類型具有以下特性以相同的順序將是相同的相同數量和類型內部類型作爲第一個 –

+0

這可能是一個非常有用的說明,謝謝你的補充! +1 –

16

使用只讀屬性創建匿名類型。在對象構造之後,您不能分配給它們。

Anonymous Types (C# Programming Guide)從上MSDN:

匿名類型提供了一種方便的方式來封裝一組只讀屬性的成單個對象,而不必首先明確地定義一個類型。

7

匿名類型提供一種方便的方式來封裝一組 只讀屬性成單個 對象,而不必首先 明確地定義一個類型。 的名稱由編譯器生成,並且 在源代碼 級別不可用。編譯器推斷的屬性類型爲 。以下示例顯示了一個匿名 類型,該類型正在使用名爲「金額和消息」的兩個 屬性進行初始化。

http://msdn.microsoft.com/en-us/library/bb397696.aspx