Удалить элемент из списка на основе условия
public struct stuff
{
public int ID;
public int quan;
}
Я хочу удалить продукт, где ID
= 1. Я пытаюсь это в настоящее время:
prods.Remove(new stuff{ prodID = 1});
и это не работает.
СПАСИБО ВСЕМ
7 ответов:
С помощью linq:
prods.Remove( prods.Single( s => s.ID == 1 ) );
может быть, вы даже хотите использовать
SingleOrDefault()
и проверьте, существует ли элемент вообще ...EDIT:
Так какstuff
- это структура,SingleOrDefault()
не вернет null. Но он вернется default (stuff ), который будет иметь идентификатор 0. Когда у вас нет идентификатора 0 для нормальный stuff-объекты, которые вы можете запросить для этого идентификатора:var stuffToRemove = prods.SingleOrDefault( s => s.ID == 1 ) if( stuffToRemove.ID != 0 ) { prods.Remove( stuffToRemove ); }
если ваш тип коллекции-это
List<stuff>
, то лучший подход, вероятно, следующее:prods.RemoveAll(s => s.ID == 1)
это только один проход (итерация) по списку, поэтому должно быть более эффективным, чем другие методы.
если ваш тип является более общим является
ICollection<T>
, это может помочь написать короткий метод расширения, если вы заботитесь о производительности. Если нет, то вам, вероятно, сойдет с рук использование LINQ (callingWhere
илиSingle
).
Если у вас есть LINQ:
var itemtoremove = prods.Where(item => item.ID == 1).First(); prods.Remove(itemtoremove)