今天有看到一個寫法是
var teaps = A.Concat(new Dictionary<string, List>() { { "名單", data.ToList() } })
.ToDictionary(z => z.Key, z => z.Value);
想請問 定義 new Dictionary 的值 為什麼需要用兩層{}呢? 而只用一層無法呢
這是 C# 6.0 新增語法糖 : Dictionary Initializers
,外括號代表宣告要建立多個
key,value集合,內括號代表一組key,value
我做了一個簡單比對的例子,一看就明白邏輯樣貌
Dictionary Initializers :
var dic = new Dictionary<string, string>() {
{ "key1", "value1" } ,
{ "key2", "value2" }
};
C# 6.0 之前的 Add 方式 :
var dic = new Dictionary<string, string>();
dic.Add("key1","value1");
dic.Add("key2","value2");
那是Dictionary在C#的初始化簡短寫法
我加上註解和排版, 應該會更好懂
var A = new Dictionary<string, List<int>>();
var data = new List<int> { 1, 2, 3 };
var teaps = A.Concat(
new Dictionary<string, List<int>>()
{
{ "名單", data.ToList() }, // key-value pair 1
{ "其他名單", data.ToList() } // key-value pair 2
})
.ToDictionary(z => z.Key, z => z.Value);
可以順便問一下不簡化的寫法嗎?或是有除此之外的寫法
不簡化的話, 要先定義一個Dictionary
變數, 再用Add
函式一筆一筆加入
像這樣
var A = new Dictionary<string, List<int>>();
var data = new List<int> { 1, 2, 3 };
var myNewData = new Dictionary<string, List<int>>();
myNewData.Add("名單", data.ToList());
myNewData.Add("其他名單", data.ToList());
var teaps = A.Concat(myNewData)
.ToDictionary(z => z.Key, z => z.Value);
其實在Visual Studio可以把要編譯的C#版本降低一點, 就能玩看看早期寫C#的風格~
了解! 跟簡化寫法相見恨晚