2009-10-11 11 views
35

¿Qué hay de malo con este fragmento de código?C# Los tipos anónimos no se pueden asignar a - es de solo lectura

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(); 
    } 
} 

estoy consiguiendo los errores siguientes:

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 

valores Cómo re-establecido en un objeto tipo anónimo?

Respuesta

48

Los tipos anónimos en C# son inmutables y por lo tanto no tienen métodos setter propiedad. Tendrá que crear un nuevo tipo anonmyous con los valores

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

Una más cosa a destacar, es que si el nuevo tipo anónimo tiene el mismo número y tipo de propiedades en el mismo orden que será de la misma tipo interno como el primero –

+0

Esto podría ser una nota muy útil, ¡gracias por agregar eso! +1 –

16

Los tipos anónimos se crean con propiedades de solo lectura. No puede asignarlos después de la construcción del objeto.

De Anonymous Types (C# Programming Guide) en MSDN:

Los tipos anónimos proporcionan una manera conveniente para encapsular un conjunto de propiedades de sólo lectura en un único objeto sin tener que primero definir explícitamente un tipo.

7

Los tipos anónimos proporcionan una manera conveniente para encapsular un conjunto de propiedades de sólo lectura en una sola objeto sin tener que primero definir explícitamente un tipo. El compilador genera el nombre y no está disponible en el código fuente . El tipo de propiedades es inferido por el compilador. El siguiente ejemplo muestra un tipo anónimo que se inicializó con dos propiedades llamadas Cantidad y Mensaje.

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

Cuestiones relacionadas