【发布时间】:2012-05-08 17:01:26
【问题描述】:
我有一份现有馆藏清单,我想合并到另一个馆藏清单中。我知道使用 foreach 和 for 循环是一种不好的方法,但我想不出使用 LINQ 来减少这种情况的好方法。
private void CombineHoldings(List<Holding> holdingsToAdd, ref List<Holding> existingHoldings)
{
foreach (Holding holdingToAdd in holdingsToAdd)
{
Boolean found = false;
for (int i = 0; i < existingHoldings.Count; i++)
{
if (existingHoldings[i].Sector == holdingToAdd.Sector)
{
found = true;
existingHoldings[i].Percentage += holdingToAdd.Percentage;
}
}
if (!found)
existingHoldings.Add(holdingToAdd);
}
foreach (Holding holding in existingHoldings)
holding.Fund = "Combined Funds";
}
【问题讨论】:
-
如果使用 foreach 和 for 循环是一种不好的方法,那么请避开 Linq,因为 Linq 在幕后使用 foreach 和 for 循环。顺便说一句 - 你应该在
found = true时在内部 if 循环中添加一个break,否则,当你已经找到你的项目时,你将继续迭代集合。 -
你为什么要通过 ref 传递一个列表
? -
Merging two IEnumerable<T>s 的可能重复项
-
@Metro Smurf,你太迂腐了。这里没有任何迹象表明 OP 关心性能。因此,我们只能得出结论,OP 认为声明
found变量非常不令人满意。我想这是我们都可以同情的事情,事实上,LINQ 是一种优秀的工具,可以编写优雅的代码来解决 T 的此类问题。 -
如果不是迂腐的话,那什么都不是。