19

Ich habe folgendes Auto ImmobilienDefault Attribut funktioniert nicht mit meinem Auto Property

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

wenn ich versuche, es zu benutzen, in den Code i falsch den Standard finden false ist ich nehme an, dies ist der Standardwert eine bool Variable, hat jemand eine Ahnung, was ist falsch?

+0

[Ähnliche Frage] (http://stackoverflow.com/questions/705553/net-defaultvalueattribute-on-properties). In VS2015: 'public bool RetrieveAllInfo {erhalten; einstellen; } = true; 'Es ist [C# 6] (https://blogs.msdn.microsoft.com/csharpfaq/2014/11/20/new-features-in-c-6/) -Funktion. – marbel82

Antwort

26

Das DefaultValue-Attribut wird nur verwendet, um den Visual Studio Designern (z. B. beim Entwerfen eines Formulars) mitzuteilen, was der Standardwert einer Eigenschaft ist. Es legt den tatsächlichen Standardwert des Attributs in Code nicht fest.

Mehr Infos hier: http://support.microsoft.com/kb/311339

+1

Danke Philippe, ich denke, die einzige Lösung ist vom Konstrukteur. Danke –

11

[DefaultValue] werden nur von (zum Beispiel) Serialisierung APIs (wie XmlSerializer) und einige UI-Elemente (wie PropertyGrid) verwendet. Es setzt den Wert nicht selbst; Sie müssen einen Konstruktor für diese Verwendung:

public MyType() 
{ 
    RetrieveAllInfo = true; 
} 

oder das Feld manuell eingestellt, das heißt nicht eine automatisch implementiert-Eigenschaft mit:

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

Ein Hack dafür ist auf this Link.

Kurz gesagt, rufen Sie diese Funktion am Ende des Konstruktors auf.

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

Dies ist gefährlich und sollte nicht verwendet werden. Dies legt die Eigenschaften abgeleiteter Klassen fest, bevor der Basisklassenkonstruktor beendet wurde, bevor die abgeleitete Klasse die Möglichkeit hatte, alles einzurichten, was benötigt wird, um die Eigenschafteneinsteller zu arbeiten. – hvd