Entferne das Objekt aus der Liste und erhalte das Objekt gleichzeitig

8

In C # versuche ich ein Objekt aus einer Liste in einem zufälligen Index zu bekommen. Wenn es abgerufen wurde, möchte ich, dass es entfernt wird, sodass es nicht mehr ausgewählt werden kann. Es scheint, als ob ich eine Menge Operationen brauche, um das zu tun, gibt es nicht eine Funktion, wo ich einfach einen Gegenstand aus der Liste extrahieren kann? Die RemoveAt (Index) -Funktion ist ungültig. Ich möchte eine mit einem Rückgabewert.

Was ich mache:

%Vor%

Was ich gerne tun würde:

%Vor%

Existiert eine solche "removeAndGetItem" -Funktion?

    
Eirik 01.03.2013, 09:10
quelle

2 Antworten

15

Nein, da es sich um eine Verletzung der reinen Funktionsetikette handelt, bei der eine Methode entweder einen Nebeneffekt hat oder einen nützlichen Wert liefert (d. h. nicht nur einen Fehlerzustand anzeigt) - niemals beides.

Wenn Sie möchten, dass die Funktion atomar erscheint, können Sie eine Sperre für die Liste erstellen, die verhindert, dass andere Threads auf die Liste zugreifen, während Sie sie ändern:

%Vor%     
RoadieRich 01.03.2013, 09:18
quelle
5
%Vor%

Diese werden Erweiterungsmethoden genannt, rufen Sie als new List<T>().RemoveAndGetItem(0) auf.

Dinge, die in der Erweiterungsmethode zu beachten sind

Ausnahmebehandlung mit dem Index, den Sie übergeben, überprüfen Sie, dass der Index mit 0 und der Anzahl der Liste ist, bevor Sie das tun.

    
LukeHennerley 01.03.2013 09:12
quelle

Tags und Links