есть ли в любом случае удалить из коллекции, основанной на предложении .Where () linq (.RemoveWhere ()?) - PullRequest
6 голосов
/ 07 ноября 2011

Я вижу, что в коллекции есть методы .Remove () и .RemoveAt ().Я хотел бы сделать что-то вроде этого:

  myObject.ChildList.RemoveWhere(r=>r.Name == "Joe");

Каков наилучший способ достичь этого, кроме выполнения отдельного, где и затем цикл по каждому элементу и их вызова .Remove ()

Ответы [ 3 ]

14 голосов
/ 07 ноября 2011

List<T> имеет метод RemoveAll, который принимает предикат.

myObject.ChildList.RemoveAll(r => r.Name == "Joe");
2 голосов
/ 07 ноября 2011

Вы можете написать RemoveWhere() в качестве метода расширения. Но менять коллекции сложно, а иногда и очень неэффективно.

Почему бы не создать новую коллекцию?

myObject.ChildList = myObject.ChildList.Except(
      myObject.ChildList.Where(r=>r.Name == "Joe"));
0 голосов
/ 07 ноября 2011

В зависимости от того, насколько вы хотите, чтобы ваши условия были, вы можете просто вызвать Where (), но инвертировать всю логику, которую вы сделали бы в RemoveWhere (). Это может быть немного запутанным и почти наверняка будет немного менее эффективным, чем функция типа RemoveWhere (), но если вы хотите сделать что-то простое и быть ленивым, все будет в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...