今天一朋友問我一個問題:怎樣用集合初始設定項來初始化一個字典?他一直認為所謂集合初始設定項就是向一個類似List的容器中逐個添加資料,但是換成了字典一次需要兩個資料,一下不知道怎麼辦……
我首先又一次強烈推薦他把MSDN當成解決一切問題的第一步嘗試,其實集合初始設定式MSDN裡闡述得很透徹(地址:http://msdn.microsoft.com/zh-cn/library/bb384062.aspx ):集合初始設定式就是連續調用一個IEnumerable類的Add函數。多個參數可以用{}(大括弧)來分割。
那麼初始化字典就是這樣:
IDictionary<int, string> dic = new Dictionary<int, string>()
{
{23, "sfds"},
{434, "rg"},
{-3, "jif"}
};
foreach (KeyValuePair<int, string> pair in dic)
Console.WriteLine(pair);
輸出:
[23, sfds]
[434, rg]
[-3, jif]
也可以自訂一個類繼承IEnumerable並有Add函數
class a : System.Collections.IEnumerable
{
public void Add(object a, object b)
{
Console.WriteLine("Add被調用,a={0}, b={1}", a, b);
}
#region IEnumerable Members
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
throw new NotImplementedException();
}
#endregion
}
class Program
{
static void Main()
{
a obj = new a()
{
{1, "hehe"},
{DateTime.Now, Guid.NewGuid()}
};
}
}
輸出:
Add被調用,a=1, b=hehe
Add被調用,a=6/23/2011 4:07:35 PM, b=73ecbf16-1cab-4aa6-af20-2afc9b622e67
當對一個非IEnumerable類使用集合初始設定項或一個IEnumerable類但沒有Add函數,VS會產生編譯錯誤。