2012-06-12 8 views
16

Ho la seguente classe City. Ogni oggetto della città contiene un dizionario che le chiavi sono tag della lingua (diciamo: "EN", "DE", "FR" ...) e quali valori sono i nomi delle città nelle lingue corrispondenti (es: Roma/Rom ecc.) .Aggiunta di valori a un dizionario tramite inizializzazione inline del suo contenitore

public class City: 
{ 
    private IDictionary<string, string> localizedNames = new Dictionary<string, string>(0); 
    public virtual IDictionary<string, string> Names 
    { 
    get { return localizedNames ; } 
    set { localizedNames = value; } 
    } 
} 

maggior parte delle città hanno gli stessi nomi qualunque sia la lingua in modo che il costruttore di City non crea effettivamente la mappatura inglese:

public City(string cityName) 
    { 
    this.LocalizedNames.Add("EN", cityName); 
    } 

Qui viene la domanda: c'è un modo per aggiungere la altri valori tramite inizializzazione in linea?

ho provato diverse varianti del seguente senza successo semantica (non compilare):

AllCities.Add(new City("Rome") { Names["DE"] = "Rom" }; 

Ho anche cercato di creare un nuovo dizionario, ma questo sovrascrive ovviamente il parametro "EN":

AllCities.Add(new City("Rome") { Names = new Dictionary<string, string>() { { "DE", "Rom" } } }; 

Qualcuno sa se questo è possibile?

+0

Nota: * inizializzazione del costruttore * non è la terminologia appropriata. Pensa all'inizializzazione di ** oggetto ** e ** raccolta **, nessuno dei quali viene eseguito tramite un costruttore. –

+0

hai ragione, ho modificato il titolo, grazie –

risposta

16
AllCities.Add(new City("Rome") { Names = { { "DE", "Rom" }, { "...", "..." } } }); 

Questo utilizza la sintassi di inizializzatore per richiamare il metodo .Add.

+0

Questo sovrascriverà il valore aggiunto nel costruttore, proprio come farà l'ultimo blocco di codice fornito dal richiedente. – Rawling

+3

No, non lo farò. Si aggiungerà al dizionario esistente. Non ne creerà uno nuovo. – usr

+0

... Mi hai preso, non l'ho provato. Dammi un secondo. Se hai ragione, mi scuserò umilmente. – Rawling

6

questo è vero in linea intialization:

private IDictionary<string, string> localizedNames = new Dictionary<string, string>{ 
    {"key1","value1"}, 
    {"key2","value2"} 
}; 
Problemi correlati