2010-11-01 18 views
14

Immaginate di avere un campo _item in una classe. È possibile inizializzare nel punto della dichiarazione:È possibile inizializzare una proprietà nel punto di dichiarazione

class C 
{ 
    IList<string> _items=new List<string>(); 
} 

Ora voglio convertire questo campo per una proprietà generato automaticamente, ma l'inizializzazione non è più valido:

class C 
{ 
    public IList<string> Items=new List<string>(); {get; set;} // Invalid 
} 

Quindi, devo fare :

class C 
{ 
    public IList<string> Items {get; set;} 

    public C 
    { 
    Items=new List<string>(); 
    } 
} 

Ma non è così conveniente come inizializzazione campi nel punto di dichiarazione. C'è un modo migliore per farlo, senza dover (inutilmente) restituire questa proprietà con un campo privato (inizializzato al punto di dichiarazione), per esempio.

Grazie

+2

possibile duplicato (http: // StackOverflow. it/questions/40730/how-do-you-give-ac-auto-property-a-valore-predefinito) –

risposta

19

No, proprietà automatiche non consentono di impostare un valore iniziale.

È fastidioso, ma tale è la vita. (E 'fastidioso che non possono essere di sola lettura, troppo, ma questo è un rant per un altro giorno..)

EDIT: Entrambe le proprietà di sola lettura implementate automaticamente e specificare un valore iniziale sono in programma di essere in C# 6.

+0

Davvero è davvero. Ma guardiamo dal lato positivo. Abbiamo impostato l'auto-get. Questo solo mi rende felice. – Proclyon

+1

Sì, avrei * amato * essere in grado di digitare 'IList {get; set privato; } = new List (); 'o qualcosa di simile. –

+0

@Fredrik, era esattamente quello che speravo. Forse questa sarebbe una buona caratteristica da chiedere in C# 5? –

0

No, questo è l'unico modo.

0

Poiché non si dichiara il campo quando si utilizza { get; set; }, non è possibile specificare il valore iniziale.

Quindi è necessario dichiarare il campo o inizializzarlo nel costruttore.

0

L'utilizzo di un campo di protezione privato o l'impostazione del valore nel costruttore sono gli unici modi per fornire i valori iniziali a una proprietà.

0

Non credo, in fase di costruzione, come si dimostra, è il modo migliore per non dover utilizzare un backer privato e quindi utilizzare il concatenamento per stabilire se la proprietà viene sempre inizializzata:

public MyClass() { PropA = default_Value; } 
public MyClass(params object[] args) : this() { /* other code */ } 

Sarebbe una bella caratteristica; ma poi, le proprietà auto implementate sono lì per semplificare l'implementazione della proprietà sui tipi; e non riesco a vedere come si possa aggiungere, a livello di lingua, la caratteristica del valore predefinito a una proprietà automatica senza che il codice abbia un aspetto un po ', beh, strano.

Ma allora, è per questo che non sono un designer di lingue.

0

Ho paura che non è possibile inizializzare direttamente una proprietà auto quando la si dichiara. E sono d'accordo che questo è un peccato. Neanche io conosco un modo migliore del costruttore. Vedere anche Initializing C# auto-properties

3

in C# 6 si può scrivere qualcosa di simile: [? Come si fa a dare un C# Auto-proprietà un valore di default]

class C 
{ 
    public IList<string> Items {get; set;} = new List<string>(); 
} 
+1

Infine questo è stato aggiunto a C# !!! Ha funzionato per me, grazie. – lukiller

Problemi correlati