从List <t>中删除基于子字符串匹配</t>

时间:2012-02-22 15:08:49

标签: c# c#-4.0 collections filtering

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

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

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

删除所有项目。

我目前使用另一个列表并通过for循环并将内容添加到第二个列表中,但我真的不喜欢这种方法。

有没有更清洁的方法来实现我的目标?

2 个答案:

答案 0 :(得分:4)

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

Elementry亲爱的沃森;)

答案 1 :(得分:0)

我猜你的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(...)的返回值以检查已删除的元素数量是否正确。