获取 ForEach 中的当前索引
本文关键字:索引 ForEach 获取 | 更新日期: 2023-09-27 18:33:47
我有一个通道列表,我的一些通道有未分配的单元,然后传递到一个单独的容器中。我真正想做的是在我的容器中传递 ForEach 调用中列表当前位置的索引。我可以用linq做这样的事情吗,还是我最好使用for..循环代替?
如果可能的话,很想使用 linq :)无论如何,这是我的代码:
item.Channels.Where(ch => !ch.IsSkipped).ForEach(
ch =>
{
if (ch.AssignedUnit == null)
{
//unknownUnitChannels.Add(ch);
unknownUnitChannels.Add(index, ch) <== This is the index i'd like to pass there
}
});
如果要使用原始索引(在应用Where
之前),则需要类似以下内容:
item.Channels.Select((c, i) => new { Channel = c, Index = i })
.Where(x => !x.Channel.IsSkipped)
.ForEach(x =>
/* x.Channel is your item, x.Index is its original Index */
);
任何
正在ForEach
的东西都不一定有索引。并非每个IEnumerable
都按索引存储。
如果你想要一个索引,你可以做这样的事情:
int index = 0;
foreach(var ch in item.Channels.Where(x => x.IsSkipped))
{
if (ch.AssignedUnit == null) {
unknownUnitChannels.Add(index, ch);
}
index++;
}
如果要在筛选之前获取索引,请执行以下操作:
int index = 0;
foreach(var ch in item.Channels)
{
if (ch.AssignedUnit == null && !x.IsSkipped) {
unknownUnitChannels.Add(index, ch);
}
index++;
}