2016-09-10 6 views
1

デモコードについては、forというループがあり、何らかの条件に基づいてメソッド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

は、それが処理されるか、されていないことを示す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 
     } 
    } 
} 
関連する問題