我有一个频道列表,我的一些频道有未分配的单位,然后传递到一个单独的容器中。我真正想做的是让我的列表中当前位置的索引在我的容器中传递给ForEach调用。我可以用linq做这样的事情,或者我最好使用for..loop吗?
如果可能,我会喜欢使用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
}
});
答案 0 :(得分:4)
如果您想使用原始索引(在应用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 */
);
答案 1 :(得分:3)
任何正在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++;
}