【问题标题】:C# Remove all Items from List<T> if a property is in a List<string> [duplicate]C# 如果属性在 List<string> 中,则从 List<T> 中删除所有项目 [重复]
【发布时间】:2016-06-08 12:02:29
【问题描述】:

我有一个List&lt;T&gt;,其中 T 有一个字符串属性,我们称之为Value

然后我有一个包含一些关键字的List&lt;string&gt;

如何从List&lt;T&gt; 中删除属性值与List&lt;string&gt; 中的一个关键字匹配的所有项目?

【问题讨论】:

  • 请注意,Styxxy 解决方案(一个不错的一行!)不使用任何 LINQ。由于泛型在 .NET 中(如果我没记错的话,是 2.0 版),因此可以使用该优雅的代码
  • 旁注:HashSet&lt;String&gt; 是比List&lt;String&gt; 更好的关键字 集合,它执行Contains 更快。

标签: c# linq list


【解决方案1】:

使用List&lt;T&gt;.RemoveAll Method (Predicate&lt;T&gt;),并带有一个检查关键字列表是否包含值的谓词。

示例控制台应用程序:

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

【讨论】:

  • keywords.Contains(a.Value) 这里a 可以是null 请为这种情况添加检查
  • @Vlad,不,aas 不包含单个 null 元素。
  • 这很好,但在现实世界中它会发生
  • 这只是一个示例来演示如何使用它。如果列表可能有一个空值,则必须确实检查它(但也许在他的应用程序逻辑中,它不可能包含空值;你不知道;那是他的责任)。
【解决方案2】:
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));

    }
}

【讨论】:

    猜你喜欢
    • 2012-10-02
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 2012-09-28
    相关资源
    最近更新 更多