web-dev-qa-db-de.com

Wie entferne ich das letzte Element, das der Liste hinzugefügt wurde?

Ich habe eine Liste in c #, in der ich Listenfelder hinzufüge. Jetzt muss ich die Bedingung überprüfen, wenn die Bedingung erfüllt ist. Dann muss ich die letzte Zeile aus der Liste entfernen. Hier ist mein Beispielcode.

    List<> rows = new List<>();
    foreach (User user in users)
    {
        try
        {
            Row row = new Row();
            row.cell = new string[11];
            row.cell[1] = user."";
            row.cell[0] = user."";
            row.cell[2] = user."";         

            rows.Add(row);

            if (row.cell[0].Equals("Something"))
            {

                //here i have to write code to remove last row from the list
                //row means all the last three fields

            }

        }

Meine Frage ist also, wie Sie die letzte Zeile aus der Liste in c # .. entfernen. Bitte helfen Sie mir.

24
Pranav

Da diese Frage nun gut in Suchmaschinen funktioniert, lautet die direkte Antwort auf diese Frage:

if(rows.Any()) //prevent IndexOutOfRangeException for empty list
{
    rows.RemoveAt(rows.Count - 1);
}

Allerdings ...Im konkreten Fall dieser Frage ist es sinnvoller, die Zeile nicht an erster Stelle hinzuzufügen:

Row row = new Row();
//...      

if (!row.cell[0].Equals("Something"))
{
    rows.Add(row);
}

TBH, ich würde noch einen Schritt weiter gehen, indem ich "Something" gegen user."" teste und nicht einmal eine Row instanziiere, es sei denn, die Bedingung ist erfüllt, aber da user."" nicht kompiliert wird, werde ich ' Ich lasse das als Übung für den Leser.

23
spender

Ich denke, der effizienteste Weg, dies zu tun, ist die Verwendung von RemoveAt :

rows.RemoveAt(rows.Count - 1)
73
Patrick Hofman
rows.RemoveAt(rows.Count - 1);
12
Pradip Daunde

Sie können die List<T>.RemoveAt-Methode verwenden:

rows.RemoveAt(rows.Count -1);
6
Selman Genç

wenn Sie es öfter tun müssen, können Sie sogar eine eigene Methode erstellen, um das letzte Element zu platzieren. etwas wie das:

public void pop(List<string> myList) {
    myList.RemoveAt(myList.Count - 1);
}

oder sogar anstelle von void können Sie den Wert wie folgt zurückgeben:

public string pop (List<string> myList) {
    // first assign the  last value to a seperate string 
    string extractedString = myList(myList.Count - 1);
    // then remove it from list
    myList.RemoveAt(myList.Count - 1);
    // then return the value 
    return extractedString;
}

beachten Sie, dass der Rückgabetyp der zweiten Methode nicht void ist. Es ist string b/c. Wir möchten, dass die Funktion einen String zurückgibt ...

1
a_m_dev