【问题标题】:Remove from List<T> based on sub-string match根据子字符串匹配从 List<T> 中删除
【发布时间】:2012-03-12 22:24:57
【问题描述】:
sampleList.RemoveAll(a=>a.reference.Contains("123"));

这行代码不会从列表中删除任何项目,而

sampleList.RemoveAll(a=>!a.reference.Contains("123"));

删除所有项目。

我目前采取了制作另一个列表并通过 for 循环并将内容添加到第二个列表的方法,但我不太喜欢这种方法。

有没有更简洁的方法来实现我正在尝试的目标?

【问题讨论】:

  • 您确定在reference 中有包含字符串“123”的项目吗?
  • 后一种根本不应该编译,你提供了正确的代码sn-p吗?
  • 为我工作:rextester.com/TPAQW81340
  • @sll 你是对的,纠正它
  • 好的,请提供您用于重现此问题的最少样本数据

标签: c# c#-4.0 collections filtering


【解决方案1】:

第二个示例“删除所有项目”而第一个示例不删除任何项目,这让我得出结论,列表中项目的 reference 属性都不包含字符串“123”。

我亲爱的沃森小学;)

【讨论】:

  • 显然是在删除其他内容而不是参考:|
【解决方案2】:

我猜你的sampleList 不包含包含“123”的元素。事实证明,第一次尝试不会删除任何内容,而第二次尝试(与第一次相反)会删除所有内容。

这是我编写的一个示例控制台应用程序,用于测试我认为您想要实现的目标,并且它有效:

static void Main(string[] args)
{
    List<string> sampleList = new List<string>(new string[]
    {
        "Some String", "Some Other String", "Hello World", "123456789", "987654123"
    });

    Console.WriteLine("Items:");
    foreach (string item in sampleList)
    {
        Console.WriteLine(item);
    }

    Console.WriteLine("\nRemoving items containing \"123\"...");

    int itemsRemoved = sampleList.RemoveAll(str => str.Contains("123"));
    Console.WriteLine("Removed {0} items.", itemsRemoved);

    Console.WriteLine("\nItems:");
    foreach (string item in sampleList)
    {
        Console.WriteLine(item);
    }

    Console.ReadKey();
}

首先检查您集合中项目的值。确定值包含应有的值后,请检查 RemoveAll(...) 的返回值以检查已删除的元素数量是否正确。

【讨论】:

    猜你喜欢
    • 2016-04-08
    • 2021-09-12
    • 1970-01-01
    • 2019-08-04
    • 2017-05-15
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多