C# removing items from listbox
Solution 1:
You can't use an enumerator, you have to loop using an index, starting at the last item:
for (int n = listBox1.Items.Count - 1; n >= 0; --n)
{
string removelistitem = "OBJECT";
if (listBox1.Items[n].ToString().Contains(removelistitem))
{
listBox1.Items.RemoveAt(n);
}
}
Solution 2:
You can't modify the references in an enumerator whilst you enumerate over it; you must keep track of the ones to remove then remove them.
This is an example of the work around:
List<string> listbox = new List<string>();
List<object> toRemove = new List<object>();
foreach (string item in listbox)
{
string removelistitem = "OBJECT";
if (item.Contains(removelistitem))
{
toRemove.Add(item);
}
}
foreach (string item in toRemove)
{
listbox.Remove(item);
}
But if you're using c#3.5, you could say something like this.
listbox.Items = listbox.Items.Select(n => !n.Contains("OBJECT"));
Solution 3:
You want to iterate backwards through using a counter instead of foreach. If you iterate forwards you have to adjust the counter as you delete items.
for(int i=listBox1.Items.Count - 1; i > -1; i--) {
{
if(listBox1.Items[i].Contains("OBJECT"))
{
listBox1.Items.RemoveAt(i);
}
}