2012-06-12 25 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"} 
};