获取 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
                            }
                        });

获取 ForEach 中的当前索引

如果要使用原始索引(在应用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++;
}