Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove an item in a list while it's in a foreach loop c# [duplicate]

Tags:

c#

foreach

If I use an item in a foreach loop and I can't use the item it has to delete the item that is currently in the foreach loop.

This is the code that I have right now:

foreach (Line line in linelijst)
{
    try
    {
        if (line.ActorIndex() == 0)
        {
            line.setStartPoint(actorenlijst[0].getLinePoint()); //if actorenlijst[0] doesn't excist it has to delete the current line
        }
        if (line.ActorIndex() == 1)
        {
             line.setStartPoint(actorenlijst[1].getLinePoint()); //if actorenlijst[1] doesn't excist it has to delete the current line
        }
        if (line.ActorIndex() == 2)
        {
             line.setStartPoint(actorenlijst[2].getLinePoint()); //if actorenlijst[2] doesn't excist it has to delete the current line
        }
        Point start = line.getStartPoint();
        Point end = line.getEndPoint();
        Pen lijn = new Pen(Color.Black, 1);
        graphics.DrawLine(lijn, start, end);
    }
    catch
    {
         //delete current line from the list
    }
}

Thanks for your interest to help other people :)

like image 768
Lesley Peters Avatar asked Sep 10 '15 13:09

Lesley Peters


2 Answers

Try just creating another temporary list for the items that need to be deleted then when your done looping you can just delete the ones in the temp list.

List<Type> temp = new List<Type>()
foreach(item in mainList)
{
   if (item.Delete)
   {
      temp.Add(item);
   }
}

foreach (var item in temp)
{
   mainList.Remove(item);
}
like image 146
kakashi21 Avatar answered Oct 18 '22 12:10

kakashi21


You canNOT change the listing through which you are going. It is locked because it is an Enumeration as long as it is in the foreach. So use a for-loop instead.

for (int i = linelijst.count; i > 0; i--)
{
    // linelijst[i - 1] can be removed, etc.
}

or use (as the commentators suggested):

for (int i = linelijst.count - 1; i >= 0; i--)
{
    // linelijst[i] can be removed, etc.
}
like image 38
Marcel Grüger Avatar answered Oct 18 '22 12:10

Marcel Grüger