2009-10-11 20 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

匿名型は不変ですので、プロパティのセッターメソッドを持っていません。新しい匿名型は、同じ順序で同じプロパティの数と種類を持っている場合、それは同じであることになるということです、値に注意する

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

もう一つの新しいanonmyousタイプを作成する必要があります内部のタイプは最初のように –

+0

これは非常に便利なメモかもしれません、それを追加していただきありがとうございます! +1 –

16

匿名型は、読み取り専用のプロパティで作成されます。オブジェクトの作成後に割り当てることはできません。 MSDNにAnonymous Types (C# Programming Guide)から

匿名型は、最初の明示的タイプを定義することなく、単一のオブジェクト内の読み取り専用プロパティのセットをカプセル化するための便利な方法を提供します。

7

匿名型は、明示的に型を定​​義する第一 することなく、単一 オブジェクトに読み取り専用プロパティのセットをカプセル化するための便利な方法を提供します。種類 はコンパイラによって生成され、 はソースコード レベルでは使用できません。プロパティのタイプは、コンパイラによって推測された です。次の例の は、匿名の タイプが、AmountおよびMessageという2つの プロパティで初期化されていることを示しています。 C#で

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

関連する問題