如何跳过已处理的列表数据?

时间:2016-09-10 03:56:48

标签: c# loops logic

对于演示代码,我有一个for循环,根据某些条件调用方法LoopData

LoopData方法中,我正在迭代列表List<Data>并且此方法一次又一次地调用各种条件,并且每次整个列表List<Data>都在迭代。

问题是,如何跳过上一次调用中已经处理的列表List<Data>中的那些记录?

这是代码,

public class Data
{
    public int Id { get; set; }
    public int ItemId { get; set; }
}


class Program
{
    static void Main(string[] args)
    {
        List<Data> data = new List<Data>
        {
            new Data { Id = 1, ItemId = 100 },
            new Data { Id = 2, ItemId = 200 },
            new Data { Id = 3, ItemId = 300 },

            new Data { Id = 4, ItemId = 400 },
            new Data { Id = 5, ItemId = 500 }
        };

        for(int i = 1; i <= 2; i++)
        {
            if (i == 1)
            {
                LoopData(data, 100, 300);
            }
            else
            {
                LoopData(data, 300, 500);
            }
        }
    }

    private static void LoopData(List<Data> data, int startItemId, int endItemId)
    {
        for(int i = 0; i < data.Count; i++)
        {
            if(data[i].ItemId >= startItemId && data[i].ItemId <= endItemId)
            {
                //
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

Data添加一个属性,表明它已被处理。

public class Data
{
    public int Id { get; set; }
    public int ItemId { get; set; }
    public bool Processed { get; set; }
}

处理完数据后设置Data.Processed

private static void LoopData(List<Data> data, int startItemId, int endItemId)
{
    for(int i = 0; i < data.Count; i++)
    {
        if(!data[i].Processed &&
            data[i].ItemId >= startItemId && 
            data[i].ItemId <= endItemId)
        {
            //            
            data[i].Processed = True; // this data is processed
        }
    }
}