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