2016-06-08 1 views
0

У меня есть List<T> где T имеет свойство строки назовем его ValueC# удалить все элементы из списка <T> если имущество находится в списке <string>

Тогда у меня есть List<string>, который содержит некоторые ключевые слова.

Как я могу удалить все предметы из List<T> где свойство Значение соответствует одному ключевому слову из List<string>?

+0

Обратите внимание, что решение Styxxy (хорошая одна линия!) Не использует LINQ. Этот элегантный код доступен, поскольку generics находятся в .NET (версия 2.0, если я не ошибаюсь) –

+0

Сторона примечания: 'HashSet ' - лучшая коллекция для * ключевых слов *, чем 'List ', она выполняет 'Contains' быстрее , –

ответ

3

Используйте List<T>.RemoveAll Method (Predicate<T>) с предикатом, который проверяет, содержит ли список ключевых слов значение.

Пример консольного приложения:

public static class Program 
{ 
    public class A 
    { 
     public string Value { get; set; } 
    } 

    public static void Main(string[] args) 
    { 
     var keywords = new List<string>() {"A", "B", "C", "D"}; 

     var aas = new List<A>() 
     { 
      new A() {Value = "A"}, 
      new A() {Value = "AA"}, 
      new A() {Value = "B"}, 
      new A() {Value = "AB"} 
     }; 

     Console.WriteLine("Before remove:"); 
     aas.ForEach(a => Console.WriteLine(" A.Value = {0}", a.Value)); 

     aas.RemoveAll(a => keywords.Contains(a.Value)); 

     Console.WriteLine("After remove:"); 
     aas.ForEach(a => Console.WriteLine(" A.Value = {0}", a.Value)); 
    } 
} 

Выход консоли:

Before remove: 
    A.Value = A 
    A.Value = AA 
    A.Value = B 
    A.Value = AB 
After remove: 
    A.Value = AA 
    A.Value = AB 
+0

'keywords.Contains (a.Value)' здесь 'a' может быть' null', пожалуйста, добавьте проверку для этого случая – Vlad

+0

@ Vlad, nope, 'aas' не содержит ни одного элемента' null'. – Sinatr

+0

это нормально, но в реальном мире это происходит – Vlad

1
public class test 
{ 
    public string waarde { get; set; } 
} 
class Program 
{ 
    static void Main(string[] args) 
    { 
     var teBeRemoved = new List<string> {"een", "twee"}; 

     var totalList = new List<test> { new test { waarde = "een" }, new test { waarde = "drie" } }; 

     var filteredList = totalList.Where(i => !teBeRemoved.Contains(i.waarde)); 

    } 
} 
Смежные вопросы