【发布时间】:2019-02-13 19:26:06
【问题描述】:
有没有办法使用 linq select 来简化这段代码
我想从我的列表中删除一些项目并将新项目添加到具有相同索引的列表中。下面的代码有效..我正在检查这是否可以使用 LINQ select 语句而不是 foreach 来简化。
if (newHits.Any())
{
int newHitIndex = 0;
foreach (var h in allHits.ToList())
{
if (h.Type == type)
{
var index = allHits.FindIndex(a => a.Hit == h.Hit);
var newHit = newHits[newHitIndex];
allHits.RemoveAt(index);
allHits.Insert(index, newHit);
newHitIndex++;
}
}
}
【问题讨论】:
-
Linq 的
Select用于选择并可能对集合成员执行操作。它不应该用于删除和重新添加集合中的项目。在我看来,Linq 不是完成此类任务的最佳方式,我认为这不是它应该用于的。 -
有一种方法可以使用 LINQ 完成其中的一些操作,但最终可能不会像您想要的那样干净。话虽如此,肯定还有其他方法可以使这段代码更干净。
newHits和allHits是什么类型? -
Hit 是唯一键吗?
var index = allHits.FindIndex(a => a.Hit == h.Hit);是不是在找h的索引? -
您可以通过过滤列表来删除
if:foreach (var h in allHits.Where(hit => hit.Type == type))