web-dev-qa-db-fra.com

Comment supprimer le dernier élément ajouté à la liste?

J'ai une liste en c # dans laquelle j'ajoute des champs de la liste.

    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

            }

        }

Ma question est donc de savoir comment supprimer la dernière ligne de la liste en c # . S'il vous plaît, aidez-moi.

24
Pranav

Considérant que cette question a désormais du succès dans les moteurs de recherche, la réponse directe à cette question est la suivante:

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

Cependant ...dans le cas spécifique de cette question, il est plus logique de ne pas ajouter la ligne en premier lieu:

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

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

TBH, je ferais un pas de plus en testant "Something" contre user."", sans même instancier une Row à moins que la condition ne soit remplie, mais vu que user."" ne compilera pas, je laisserai cela comme exercice pour le lecteur.

23
spender

Je pense que le moyen le plus efficace de faire ceci est d'utiliser RemoveAt :

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

Vous pouvez utiliser la méthode List<T>.RemoveAt:

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

si vous avez besoin de le faire plus souvent, vous pouvez même créer votre propre méthode pour extraire le dernier élément; quelque chose comme ça:

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

ou même au lieu de void, vous pouvez retourner la valeur comme:

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;
}

remarquez simplement que le type de retour de la seconde méthode n'est pas vide, il s'agit de string b/c nous voulons que cette fonction nous retourne une chaîne ...

1
a_m_dev