Impostare un valore predefinito per la proprietà

È possibile impostare un valore di default senza il corpo di un immobile? Preferibilmente con annotazioni.

[SetTheDefaultValueTo(true)]
public bool IsTrue { get; set; }

[SetTheDefaultValueTo(false)]
public bool IsFalse { get; set; }

public void Something()
{
    var isTrue = this.IsTrue;
    var isFalse = this.IsFalse;
}
InformationsquelleAutor BrunoLM | 2010-06-18

 

5 Replies
  1. 37

    No, non è costruito in capacità di impostare il valore di una proprietà con i metadati. Si potrebbe utilizzare una fabbrica di qualche tipo che vorresti costruire le istanze di una classe con la riflessione e, quindi, che potrebbe impostare i valori di default. Ma in breve, è necessario utilizzare i costruttori (o campo di setter… che sono sollevati per il costruttore.) Per impostare i valori di default.

    Se si dispone di diversi sovraccarichi, per la vostra constuctor si potrebbe voler guardare costruttore di concatenamento.

    Utilizzando C# 6+ si è in grado di fare qualcosa di simile a questo…

    public string MyValue { get; set; } = "My Default";

    Oh, diventa più divertente perché la gente ha anche chiesto qualcosa di simile a questo…

    //this code won't compile!
    public string MyValue {
        private string _myValue;
        get { return _myValue ?? "My Default"; }
        set { _myValue = value; }
    }

    … il vantaggio è che si può controllare il campo di applicazione il campo per essere accessibile nel codice della proprietà, quindi non devi preoccuparti di niente altro nella vostra classe a giocare con lo stato senza l’utilizzo di getter/setter.

    • C’è un luogo dove io possa votare per questa funzione o qualcosa di simile?
    • Si può essere in grado di trovare qualcosa su connect.microsoft.com.
    • eek… ho appena trovato questo su CodeProject. Usa la riflessione per impostare i valori di default dopo che l’oggetto è stato costruito. codeproject.com/KB/dotnet/AutoPropsDefaultValues.aspx
    • Ho pensato che ho visto un’altra voce da qualche parte su questo sito, un link ad un report su connect.microsoft.com… io non sono stato in grado di trovare di nuovo. Se qualcuno trova il link sarei lieto di aggiornare la mia risposta, di includere.
    • Molto confusa-io se il tuo secondo esempio di codice è stato offerto come una soluzione, non come esempio di qualcosa che non funziona. Ho modificato per chiarezza.
  2. 16

    Assegnare il valore predefinito della proprietà nel costruttore della classe.

    class MyClass
    {
        public MyClass()
        {
            IsTrue = true;
            IsFalse = false;
        }
    
        public bool IsTrue { get; set; }
    
        public bool IsFalse { get; set; }
    
        [...]
    
        public void Something()
        {
            var isTrue = this.IsTrue;
            var isFalse = this.IsFalse;
        }

    }

    • questo assomiglia più a una sua domanda, invece di una risposta.
  3. 8

    Se si utilizza C#5 e versioni precedenti, è necessario farlo in un costruttore.

    ma visto che il C# 6.0, la possibilità di avere auto di proprietà inizializzatori è incluso, e la sintassi è:

    public int myage { get; set; } = 33;
  4. 5

    Vecchio thread.
    Guarda come Microsoft sentito e questa funzione è disponibile in .Net Framework 4.6+ (C# 6+)
    Si può usare come

    public string MyValue { get; set; } = "My Default";
  5. 1

    In questo esempio specifico, è una sorta di in grado di:

    public bool IsFalse { get; set; }
    public bool IsTrue
    {
        get { return !IsFalse; }
        set { IsFalse = !value; }
    }
    
    public void Something()
    {
        var isTrue = this.IsTrue;
        var isFalse = this.IsFalse;
    }

    Ma, in generale, n.

Lascia un commento