2016-09-10 4 views
1

Für Demo-Code, ich habe eine for Schleife, die eine Methode LoopData basierend auf einer Bedingung ruft.Wie überspringe ich bereits verarbeitete Listendaten?

In LoopData Methode ich bin eine Liste List<Data> und diese Methode wiederholt immer wieder verschiedene Bedingungen und jedes Mal, wenn die gesamte Liste List<Data> Iterieren wiederholt.

Frage ist, wie diese Datensätze aus der Liste List<Data>, die bereits im vorherigen Aufruf verarbeitet?

Hier ist der Code,

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) 
      { 
       // 
      } 
     } 
    } 
} 

Antwort

1

der Unterkunft um Data hinzufügen darauf hinweist, dass es verarbeitet wird oder nicht.

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

Set Data.Processed wenn Sie die Daten verarbeitet haben!

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 
     } 
    } 
} 
Verwandte Themen