检查“for循环”是否在C#中的第一次或最后一次迭代

时间:2014-11-17 04:59:45

标签: c# for-loop

我的列表中有一个for loop,我希望在第一次和最后一次迭代时做一些不同的事情。我发现这个问题大约是foreach loop。 我如何才能在for loop中实现目标?

string str;
for (int i = 0; i < myList.Count; i++)
{
     //Do somthin with the first iteration
     str = "/" + i;
     //Do somthin with the last iteration
}

我想知道是否还有其他方法:

for (int i = 0; i < myList.Count; i++)
{
    if (i == 0)
    {
        //Do somthin with the first iteration
    }
    str = "/" + i;
    if (i == myList.Count-1)
    {
        //Do somthin with the last iteration
    }
}

3 个答案:

答案 0 :(得分:2)

如果你想在你的for循环中完全避免条件(根据你提供的细节看起来就是这样),你应该在第一个和最后一个项目上执行你喜欢的任何逻辑。然后,您可以构造for循环,以便忽略可枚举中的第一个和最后一个元素(将i初始化为1并将条件更改为i < myList.Count - 1)。

if (myList != null && myList.Count >= 2)
{
    YourFirstFunction(myList[0]);

    for (int i = 1; i < myList.Count - 1; i++)
    {
        YourSecondFunction(myList[i])
    }

    YourThirdFunction(myList[myList.Count - 1]);
}

YourNFunction替换为您要分别应用于第一个索引,索引之间和最后一个索引的逻辑。

请注意,我已经检查了myList是否有两个或更多项 - 我认为这个逻辑没有任何意义,除非至少第一个和最后一个索引不相同。鉴于您还计划对中间的项目执行某些操作,您可能希望将其更改为3,以确保您始终具有明确的开头,中间和结尾。

答案 1 :(得分:1)

只需对第一个和最后一个项目执行某些操作,然后循环完成其余项目:

if (myList != null && myList.Any())
{
    // Do something with the first item here  
    var str = "** START **" + myList.First();

    for (int i = 1; i < myList.Count - 1; i++)
    {
        str += "/" + i;
    }

    //Do something with the last item here 
    if (myList.Count > 1) str += myList.Last() + " ** END **";
}

答案 2 :(得分:1)

您可以从1开始循环并在外部进行第一次迭代处理。像这样:

if(myList != null && myList.Count > 0){
// Process first and last element here using myList[0] and myList[myList.Count -1]

}

for(int i = 1; i <myList.Count - 1;i++){
// process the rest
}

您需要考虑myList只有一个元素的场景。