Removing elements from binding list

15,958

Solution 1

It's not working because you are working on a copy of the list which you created by calling ToList().

BindingList<T> doesn't support RemoveAll(): it's a List<T> feature only, so:

IReadOnlyList<User> usersToRemove = UserList.Where(x => (x.id == ID)).
                                             ToList();

foreach (User user in usersToRemove)
{
    UserList.Remove(user);
}

We're calling ToList() here because otherwise we'll enumerate a collection while modifying it.

Solution 2

You could try:

UserList = UserList.Where(x => x.id == ID).ToList(); 

If you use RemoveAll() inside a generic class that you intend to be used to hold a collection of any type object, like this:

public class SomeClass<T>
{

    internal List<T> InternalList;

    public SomeClass() { InternalList = new List<T>(); }

    public void RemoveAll(T theValue)
    {
        // this will work
        InternalList.RemoveAll(x =< x.Equals(theValue));
        // the usual form of Lambda Predicate 
        //for RemoveAll will not compile
        // error: Cannot apply operator '==' to operands of Type 'T' and 'T'
        // InternalList.RemoveAll(x =&amp;gt; x == theValue);
    }
}

This content is taken from here.

Share:
15,958
Rafay Zia Mir
Author by

Rafay Zia Mir

Primarily a computational Physicist, secondarily a programmer.Love to work in both.Striving to learn learn and learn.I may be of little help but you can reach me at email: rafay_07[at]yahoo[dot]com

Updated on June 14, 2022

Comments

  • Rafay Zia Mir
    Rafay Zia Mir almost 2 years

    In one of my projects I'm trying to remove an item from a list where the id is equal to the given id.

    I have a BindingList<T> called UserList.

    Lists have all the method RemoveAll().

    Since I have a BindingList<T>, I use it like that:

    UserList.ToList().RemoveAll(x => x.id == ID )
    

    However, my list contains the same number of items as before.
    Why it's not working?