2012-06-12 51 views
16

我有以下City類。每個城市對象都包含一個字典,這些字段的關鍵字是語言標記(例如:「EN」,「DE」,「FR」...)以及哪些值是相應語言中的城市名稱(例如:Rome/Rom等) 。通過對其容器的內聯初始化將值添加到字典

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

大多數城市擁有的任何語言,以便City構造函數實際上創建了英語映射相同的名字:

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

這裏談到的問題:有沒有辦法來添加其他值通過內聯初始化?

我嘗試以下無語義成功(沒有編譯)不同的變化:

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

我也嘗試創建一個新的解釋,但是這顯然將覆蓋「EN」參數:

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

有人知道這是可能的嗎?

+0

注:*構造函數初始化*是不是合適的術語。認爲**對象**和**集合**初始化,這兩者都不是通過構造函數完成的。 –

+0

你是對的,我編輯了標題,謝謝 –

回答

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

這是使用初始化語法來調用.Add方法。

+0

這將覆蓋構造函數中添加的值,就像asker提供的最後一個代碼塊一樣。 – Rawling

+3

不,它不會。它將添加到現有的字典中。它不會創建一個新的。 – usr

+0

...你有我,我沒有嘗試過。你稍等一會兒。如果你是對的,我會虛心道歉。 – Rawling

6

這是實際的直列intialization:

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