Linq .ForEach 优化

3
有没有更优雅和/或更快的方法来编写以下代码?
foreach(var listing in listings)
{
    listing.Reviews.ForEach(r => r.ListingID = listing.ListingID);
    listing.OpenHours.ForEach(o => o.ListingID = listing.ListingID);
    listing.Photos.ForEach(r => r.ListingID = listing.ListingID);
    listing.Types.ForEach(t => t.ListingID = listing.ListingID);
}

它所做的就是遍历所有子集合并在每个子集合的项上设置一个属性。

1
@Noseratio 我不太确定。它甚至可能会更慢,因为除了循环和赋值之外没有其他工作。 - L.B
4
“@Noseratio Right?” 不一定。创建任务和同步机制的成本可能会导致执行时间变慢,具体取决于列表的大小。 - L.B
1
@Noseratio可能会因为开销而变慢...我会假设特定的代码经过少量的项目(对于任何小于1000的东西,我不会费心...并仔细测量超过那个值) - Alexei Levenkov
不在于清单的大小,而在于你如何使用它。 - Pure.Krome
1
@Pure.Krome非常性感的评论 :) - L.B
显示剩余8条评论
1个回答

1
如果所有这些属性下隐藏的类都实现了公共接口,该接口暴露了 ListingID 属性,那么你可以执行以下操作:
foreach(var listing in listings)
{
    // does not create new list or array! just prepares in-memory query
    var items = listing.Reviews
                       .Concat<IEntity>(listing.OpenHours)
                       .Concat<IEntity>(listing.Photos)
                       .Concat<IEntity>(listing.Types);

    foreach(var item in items)
        item.ListingID = listing.ListingID;
}

虽然有人可能会觉得这种方法更易读,但我并不认为它比你现在的方法更快。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接