我有此代码:
foreach (var row in App.cardSetWithWordCounts)
{
details.Children.Add(new SeparatorTemplate());
// do some tasks for every row
// in this part of the loop ...
}
我不想添加SeparatorTemplate
但我不想在foreach
的第一次运行中执行其他任务。有人对我该如何做有建议吗?
我想执行foreach
中的其余代码,但不想在第一次添加模板的行中执行。
答案 0 :(得分:11)
如果要跳过第一行,可以使用Skip
:
foreach (var row in App.cardSetWithWordCounts.Skip(1))
如果您想知道确切的行号,请使用Select
重载:
foreach (var x in App.cardSetWithWordCounts.Select((r, i) => new { Row = r, Index = i })
{
// use x.Row and x.Index
}
答案 1 :(得分:2)
最简单的方法是:
bool isFirstRun = true;
foreach (var row in App.cardSetWithWordCounts)
{
if(isFirstRun)
isFirstRun = false;
else
details.Children.Add(new SeparatorTemplate());
// do some tasks for every row
// in this part of the loop ...
}
答案 2 :(得分:1)
您可以为此目的使用Skip
方法:
foreach (var row in App.cardSetWithWordCounts.Skip(1))
更新:
foreach (var row in App.cardSetWithWordCounts.Select((c, index) => new { Row = c, Index = index })
{
if(row.Index != 0)
}
请不要忘记将以下行添加到using
指令中:
using System.Linq;
答案 3 :(得分:1)
var firstRow = true;
foreach(var row in App.cardSetWithWordCounts)
{
if(firstRow)
{
firstRow = false;
}
else
{
// rest of the code here
}
}
答案 4 :(得分:1)
您可以尝试创建一种扩展方法。
Action
的第二个参数是迭代器索引。
public static class ExtenstionArray
{
public static void ForEach<T>(this IEnumerable<T> sequence, Action< T, int> action)
{
int i = 0;
foreach (T item in sequence)
{
action(item,i);
i++;
}
}
}
然后像这样使用。
App.cardSetWithWordCounts.ForEach((i, idx)=>{
if(idx == 0){
details.Children.Add(new SeparatorTemplate());
}
// other logic
});