我需要simpify这个语句的帮助。如何将foreach更改为lambda变化的foreach以拉姆达
var r = mp.Call(c => c.GetDataset()); // returns IEnumerable of dataset
foreach (DatasetUserAppsUsage item in r)
{
datasetUserAppsUsage.Merge(item.AppsUsageSummary);
}
我需要simpify这个语句的帮助。如何将foreach更改为lambda变化的foreach以拉姆达
var r = mp.Call(c => c.GetDataset()); // returns IEnumerable of dataset
foreach (DatasetUserAppsUsage item in r)
{
datasetUserAppsUsage.Merge(item.AppsUsageSummary);
}
lambda表达式和循环是正交的。试图将它们变成另一个强力型是不合适的。该代码很好。别管它。
您可以得到.ForEach
实现,但它不会使代码更好的(事实上,这将是难以遵循,即更差),也不会更有效(其实,它会稍微慢一点,即更糟糕)。
一个foreach对'名单
@JaredPar很有趣的文章。我很惊讶。 – 2011-03-18 22:44:11
@JaredPar是的,但调用.ToList()最初只是使用的ForEach()将大满贯多少有些:) – 2011-03-19 08:06:21
你可以做以下
r.ToList().ForEach(item => datasetUserAppsUsage.Merge(item.AppsUsageSummary);
Marc Gravell 1 - JaredPar 0.5 ;-) – 2011-03-18 21:16:46
就个人而言,我不认为我会合并成一个单一的λ这一点。你可以这样做:
mp.Call(c => c.GetDataset()).ToList().ForEach(item => datasetUserAppsUsage.Merge(item.AppsUsageSummary));
不过,我会避开它,因为它是purposefully causing side effects,这确实违反了LINQ的期望,而不是它的意图非常明确。
我同意lambda表达式的目的是不同的,但有时我用这一招:
mp.Call(c => c.GetDataset())
.All(a => { datasetUserAppsUsage.Merge(a.AppsUsageSummary); return true; });
的技巧是使用所有(),并返回真正,以避免分裂。 不改底层集合里面的时候当然:)
你能不能请你包裹在代码代码块的枚举?符号看起来像'{}' – 2011-03-18 21:14:13