Как удалить последний элемент, добавленный в список?
У меня есть список в С#, в котором я добавляю поля списка. Теперь при добавлении я должен проверить условие, если условие удовлетворяет, тогда мне нужно удалить последнюю строку, добавленную из списка.
Вот мой пример кода.
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
}
}
Итак, мой вопрос заключается в том, как удалить последнюю строку из списка в С#.
Пожалуйста, помогите мне.
Ответы
Ответ 1
Прямой ответ на этот вопрос:
if(rows.Any()) //prevent IndexOutOfRangeException for empty list
{
rows.RemoveAt(rows.Count - 1);
}
Однако... в конкретном случае этого вопроса имеет смысл не добавлять строку в первую очередь:
Row row = new Row();
//...
if (!row.cell[0].Equals("Something"))
{
rows.Add(row);
}
TBH, я бы пошел дальше, протестировав "Something"
против user.""
, И даже не создавая экземпляр Row
если условие не выполнено, но рассматривая как user.""
Не скомпилируется, я оставлю это как упражнение для читателя.
Ответ 2
Я думаю, что самый эффективный способ сделать это - использовать RemoveAt
:
rows.RemoveAt(rows.Count - 1)
Ответ 3
rows.RemoveAt(rows.Count - 1);
Ответ 4
Попробуйте следующее:
rows.Remove(rows.Last());
Ответ 5
Вы можете использовать метод List<T>.RemoveAt
:
rows.RemoveAt(rows.Count -1);
Ответ 6
если вам нужно делать это чаще, вы можете даже создать свой собственный метод для выталкивания последнего элемента; что-то вроде этого:
public void pop(List<string> myList) {
myList.RemoveAt(myList.Count - 1);
}
или даже вместо void вы можете вернуть значение как:
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;
}
просто обратите внимание, что возвращаемый тип второго метода не void, это строка b/c, мы хотим, чтобы эта функция возвращала нам строку...