2012-06-12 12 views
16

Mam następującą klasę City. Każdy obiekt miasta zawiera słownik, którego kluczami są znaczniki języków (powiedzmy: "EN", "DE", "FR" ...) i które wartości są nazwami miast w odpowiednich językach (np .: Rzym/Rom itp.) .Dodawanie wartości do słownika poprzez inline inicjalizację kontenera

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; } 
    } 
} 

Większość miast mają takie same nazwy bez względu na język, więc konstruktor City ma faktycznie tworzy odwzorowanie angielskiego:

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

tu pojawia się pytanie: czy istnieje sposób, aby dodać inne wartości poprzez inicjalizację inline?

Próbowałem różnych odmian następujących bez semantycznej sukces (nie skompilować):

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

Próbowałem też stworzenie nowego słownika, ale to oczywiście nadpisuje „en” parametr:

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

Ktoś wie, czy to jest możliwe?

+0

Uwaga: * * konstruktor inicjujący nie jest odpowiednia terminologia. Think ** obiekt ** i ** kolekcja ** inicjalizacja, z których żadna nie jest wykonywana przez konstruktor. –

+0

masz rację, edytowałem tytuł, dzięki –

Odpowiedz

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

Używa składni inicjalizatora do wywołania metody .Add.

+0

To spowoduje nadpisanie wartości dodanej w konstruktorze, tak jak to zrobi ostatni blok kodu dostarczony przez pytającego. – Rawling

+3

Nie, nie będzie. Zostanie dodany do istniejącego słownika. Nie stworzy nowego. – usr

+0

... Masz mnie, nie próbowałem. Daj mi chwilkę. Jeśli masz rację, pokornie przeproszę. – Rawling

6

to rzeczywista intialization inline:

private IDictionary<string, string> localizedNames = new Dictionary<string, string>{ 
    {"key1","value1"}, 
    {"key2","value2"} 
}; 
Powiązane problemy