iT邦幫忙

0

C# LINQ Concat

今天有看到一個寫法是

var teaps = A.Concat(new Dictionary<string, List>() { { "名單", data.ToList() } })
.ToDictionary(z => z.Key, z => z.Value);

想請問 定義 new Dictionary 的值 為什麼需要用兩層{}呢? 而只用一層無法呢

2 個回答

7
暐翰
iT邦大師 1 級 ‧ 2020-08-12 14:13:45
最佳解答

這是 C# 6.0 新增語法糖 : Dictionary Initializers,外括號代表宣告要建立多個key,value集合,內括號代表一組key,value

我做了一個簡單比對的例子,一看就明白邏輯樣貌

Dictionary Initializers :

	var dic = new Dictionary<string, string>() { 
		{ "key1", "value1" } ,
		{ "key2", "value2" }
	};

xxx

C# 6.0 之前的 Add 方式 :

	var dic = new Dictionary<string, string>();
	dic.Add("key1","value1");
	dic.Add("key2","value2");
qwe891107 iT邦新手 5 級 ‧ 2020-08-12 14:19:38 檢舉

謝謝 受益良多

2
glj8989332
iT邦研究生 5 級 ‧ 2020-08-12 14:15:41

那是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);
看更多先前的回應...收起先前的回應...
qwe891107 iT邦新手 5 級 ‧ 2020-08-12 14:21:05 檢舉

謝謝大大這次也來幫我解惑~

qwe891107 iT邦新手 5 級 ‧ 2020-08-12 14:24:17 檢舉

可以順便問一下不簡化的寫法嗎?或是有除此之外的寫法

glj8989332 iT邦研究生 5 級 ‧ 2020-08-12 14:30:09 檢舉

不簡化的話, 要先定義一個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#的風格~

qwe891107 iT邦新手 5 級 ‧ 2020-08-12 14:39:44 檢舉

了解! 跟簡化寫法相見恨晚 /images/emoticon/emoticon02.gif

我要發表回答

立即登入回答