foreach (var item in testItems.Distinct())
{
if (!testMap.ContainsKey(item.GetId()))
{
testMap.Add(item.GetId(), item);
}
}
如何foreach循環轉換爲LINQ上面的代碼?謝謝。
foreach (var item in testItems.Distinct())
{
if (!testMap.ContainsKey(item.GetId()))
{
testMap.Add(item.GetId(), item);
}
}
如何foreach循環轉換爲LINQ上面的代碼?謝謝。
有時,「將{x}轉換爲LINQ」的正確方法是:不要。對於每項工作來說這都不是一個合適的工具。你目前的代碼與foreach
和字典突變很好,因爲它是。收下。
如果重複的ID(後Distinct()
)不是一個問題,你也許可以這樣做:
var map = testItems.Distinct().ToDictionary(x => x.GetId());
但僅此而已。
testItems.ToList().ForEach(item=>
{
if (!testMap.ContainsKey(item.GetId()))
{
testMap.Add(item.GetId(), item);
}
});
這是一個值得懷疑的問題,究竟是LINQ的實際使用 - 甚至它是否真的是LINQ ......最終,它基本上*與原始問題中的代碼完全相同,除非沒有區別, 'ToList()',並有很多額外的委託間接。 –
@Marc,我是aggree,我以前從來沒有遇到過linq的這麼小用處。 –
對於1行版本,你可以試試這個:
testItems.Distinct().Where(i => !testMap.ContainsKey(i.GetId()).ForEach(f => testMap.Add(f.GetId, f));
,將做整個操作在同一行,雖然我不是做的一切的鐵桿球迷一次,因爲它可以更難調試。
'ForEach'沒有從上面的代碼填充。 –
你爲什麼要把它轉換成LINQ?這不是一個查詢...另外:什麼是'testMap'? –
'testMap'是一個字典?你有沒有考慮過使用一套? – astef
@astef,是的,'testMap'是字典。 –