10 Stimmen

Entfernen von Elementen aus der Bindungsliste

In einem meiner Projekte versuche ich ein Element aus einer Liste zu entfernen, bei dem die ID gleich der angegebenen ID ist.

Ich habe eine BindingList namens UserList.

Listen haben alle die Methode RemoveAll().

Da ich eine BindingList habe, verwende ich sie so:

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

Dennoch enthält meine Liste genauso viele Elemente wie zuvor.
Warum funktioniert es nicht?

18voto

vc 74 Punkte 36002

Es funktioniert nicht, weil Sie an einer Kopie der Liste arbeiten, die Sie durch Aufrufen von ToList() erstellt haben.

BindingList unterstützt RemoveAll() nicht: Es handelt sich nur um eine Funktion von List, also:

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

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

Wir rufen hier ToList() auf, weil wir sonst eine Sammlung auflisten würden, während wir sie ändern.

2voto

Pranay Rana Punkte 170480

Sie könnten versuchen:

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

Wenn Sie RemoveAll() in einer generischen Klasse verwenden, die dazu gedacht ist, eine Sammlung von Objekten jeglichen Typs zu halten, wie in diesem Beispiel:

public class SomeClass
{

    internal List InternalList;

    public SomeClass() { InternalList = new List(); }

    public void RemoveAll(T theValue)
    {
        // das wird funktionieren
        InternalList.RemoveAll(x => x.Equals(theValue));
        // die übliche Form des Lambda Prädikats
        // für RemoveAll wird nicht kompilieren
        // Fehler: Operator '==' kann nicht auf Operanden vom Typ 'T' und 'T' angewendet werden
        // InternalList.RemoveAll(x => x == theValue);
    }
}

Dieser Inhalt stammt von hier.

0voto

Can DOGRU Punkte 59

Wenn es nur ein Element als eindeutige ID innerhalb der BindingList gibt, kann der folgende einfache Code funktionieren.

UserList.Remove(UserList.First(x=>x.id==ID));

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X