C#for循环跳过最后一项

时间:2017-01-04 04:56:17

标签: c# for-loop

我有以下for循环

int listCount = _itemCollection.Count;
//_itemCollection is of type SPListItemCollection  
for (int i=0;i<listCount;i++)
{
    var item = _itemCollection[i]; // just to prevent changes in all places inside the for loop
    if(item['expirydate']>today){
        item.delete();
        listCount--; //as I am removing 1 item, I am decrementing count
    }    
}

在这个for循环中,我正在遍历itemcollection中的项目并删除其中的一些项目。即项目将从itemcollection数组中移除,因此itemcollection.count将减少1

每次删除第3项时,我有3项要删除

我不确定应该使用什么条件才能正确

3 个答案:

答案 0 :(得分:2)

您应该按照以下相反的顺序进行操作,并使用for代替foreach,如下所示。

int listCount = _itemCollection.Count;
                    for (int i = listCount - 1; i >= 0; i--)
                    {
                     var item = _itemCollection[i]; // just to prevent changes in all places inside the for loop
                     if(item['expirydate'] > today){
                         item.delete();
                      }    
                    }

答案 1 :(得分:1)

您可以这样做:

_itemCollection.RemoveAll(item => item['expirydate'] > today);

这将删除与给定条件匹配的所有项目。

要从SPListItemCollection中删除项目,请检查此documentation

答案 2 :(得分:0)

试试这个:

    int listCount = _itemCollection.Count; 
    for (int i = 0; i < listCount; i++)
    {
        var item = _itemCollection[i];
        if(item [expirydate] > today)
        {
            _itemCollection.Remove(item);
            listCount--;
        }
    }

这可能满足您的需求。在这里你可以直接使用_itemCollection [i]而不是item。 我希望这可以帮到你。享受编码。