2009-12-30 18 views
19

tengo el siguiente Auto Propiedadatributo DefaultValue no funciona con mi propiedad Auto

[DefaultValue(true)] 
public bool RetrieveAllInfo { get; set; } 

cuando trato de usarlo dentro del código i encontrar el defecto false para es false Asumo este es el valor por defecto de una variable bool, ¿alguien tiene una pista de lo que está mal?

+0

[Pregunta similar] (http://stackoverflow.com/questions/705553/net-defaultvalueattribute-on-properties). En VS2015: 'public bool RetrieveAllInfo {get; conjunto; } = true; 'Es la característica [C# 6] (https://blogs.msdn.microsoft.com/csharpfaq/2014/11/20/new-features-inc-c-6/). – marbel82

Respuesta

26

El atributo DefaultValue solo se utiliza para indicar a los diseñadores de Visual Studio (por ejemplo, al diseñar un formulario) cuál es el valor predeterminado de una propiedad. No establece el valor predeterminado real del atributo en el código.

Más información aquí: http://support.microsoft.com/kb/311339

+1

Gracias Philippe, así que creo que la única solución es del constructor. gracias –

11

[DefaultValue] sólo es usado por las API de serialización (por ejemplo) (como XmlSerializer), y algunos elementos de la interfaz de usuario (como PropertyGrid). No establece el valor en sí mismo; debe utilizar un constructor para que:

public MyType() 
{ 
    RetrieveAllInfo = true; 
} 

o establece el campo de forma manual, es decir, no-uso de un inmueble en marcha de forma automática:

private bool retrieveAllInfo = true; 
[DefaultValue(true)] 
public bool RetrieveAllInfo { 
    get {return retrieveAllInfo; } 
    set {retrieveAllInfo = value; } 
} 
0

Un truco para esto es el this enlace.

En resumen, llame a esta función al final del constructor.

static public void ApplyDefaultValues(object self) 
    { 
     foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(self)) { 
      DefaultValueAttribute attr = prop.Attributes[typeof(DefaultValueAttribute)] as DefaultValueAttribute; 
      if (attr == null) continue; 
      prop.SetValue(self, attr.Value); 
     } 
    } 
+2

Esto es peligroso y no debe usarse. Esto establece las propiedades de las clases derivadas antes de que el constructor de la clase base haya finalizado, antes de que la clase derivada haya tenido la oportunidad de configurar todo lo necesario para que funcionen los ajustadores de propiedades. – hvd

Cuestiones relacionadas