2010-12-15 6 views
5

leemos en MSDN que "Adición de nuevas propiedades dinámicas" mediante el uso de DynamicObject Clase i escribir un programaLa adición de nuevas propiedades dinámicas

public class DemoDynamicObject : DynamicObject 
{ 

} 
class Program 
{ 
    public static void Main() 
    { 
     dynamic dd = new DemoDynamicObject(); 
     dd.FirstName = "abc"; 
    } 
} 

siguiendo Pero cuando corro este programa da error de ejecución: 'DemoDynamicObject' hace no contiene una definición para 'FirstName' si añadimos propiedad dinámica utilizando DynamicObject Class, entonces ¿por qué puede dar este error? ¿alguien puede decirme el motivo y la solución?

Respuesta

9

Al utilizar DynamicObject como su clase base, se debe proporcionar reemplazos específicos a TryGetMember y TrySetMember para realizar un seguimiento de las propiedades dinámicas que está creando (en base a la DynamicObject MSDN documentation):

class DemoDynamicObject: DynamicObject 
{ 
    Dictionary<string, object> dictionary 
     = new Dictionary<string, object>(); 

    public override bool TryGetMember(
     GetMemberBinder binder, out object result) 
    { 
     string name = binder.Name; 
     return dictionary.TryGetValue(name, out result); 
    } 

    public override bool TrySetMember(
     SetMemberBinder binder, object value) 
    { 
     dictionary[binder.Name] = value; 
     return true; 
    } 
} 

Si lo que desea es tiene un objeto dinámico al que puede agregar propiedades, puede simplemente usar una instancia de ExpandoObject y omitir la clase personalizada que hereda de DynamicObject.

+0

Muchas gracias – Vikram

+0

De nada. Si esta respuesta resolvió su problema, debería considerar marcarla como la Respuesta Aceptada. Gracias. – JeremyDWill

Cuestiones relacionadas