List<T>.RemoveAll(Predicate<T>) 方法

定义

移除与指定的谓词所定义的条件相匹配的所有元素。

public int RemoveAll (Predicate<T> match);

参数

match
Predicate<T>

Predicate<T> 委托,用于定义要移除的元素应满足的条件。

返回

List<T> 中移除的元素数。

例外

matchnull

示例

以下示例演示 RemoveAll 了 方法以及使用 Predicate<T> 泛型委托的其他几个方法。

创建了一个字符串,其中包含 8 个 List<T> 恐龙名称,其中两个 (位置 1 和 5) 以“saurus”结尾。 该示例还定义了一个名为 EndsWithSaurus的搜索谓词方法,该方法接受字符串参数并返回一个布尔值,该值指示输入字符串是否以“saurus”结尾。

FindFindLastFindAll 方法用于使用搜索谓词方法搜索列表。

方法 RemoveAll 用于删除以“saurus”结尾的所有条目。 它从头开始遍历列表,将每个元素依次 EndsWithSaurus 传递到 方法。 如果 EndsWithSaurus 方法返回 true,则删除 元素。

备注

在 C# 和 Visual Basic 中,无需在 Visual Basic) Predicate(Of String) 中显式创建Predicate<string>委托 (。 这些语言从上下文中推断出正确的委托,并自动创建它。

最后, Exists 方法验证列表中没有以“saurus”结尾的字符串。

using System;
using System.Collections.Generic;

public class Example
{
    public static void Main()
    {
        List<string> dinosaurs = new List<string>();

        dinosaurs.Add("Compsognathus");
        dinosaurs.Add("Amargasaurus");
        dinosaurs.Add("Oviraptor");
        dinosaurs.Add("Velociraptor");
        dinosaurs.Add("Deinonychus");
        dinosaurs.Add("Dilophosaurus");
        dinosaurs.Add("Gallimimus");
        dinosaurs.Add("Triceratops");

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nTrueForAll(EndsWithSaurus): {0}",
            dinosaurs.TrueForAll(EndsWithSaurus));

        Console.WriteLine("\nFind(EndsWithSaurus): {0}",
            dinosaurs.Find(EndsWithSaurus));

        Console.WriteLine("\nFindLast(EndsWithSaurus): {0}",
            dinosaurs.FindLast(EndsWithSaurus));

        Console.WriteLine("\nFindAll(EndsWithSaurus):");
        List<string> sublist = dinosaurs.FindAll(EndsWithSaurus);

        foreach(string dinosaur in sublist)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "\n{0} elements removed by RemoveAll(EndsWithSaurus).",
            dinosaurs.RemoveAll(EndsWithSaurus));

        Console.WriteLine("\nList now contains:");
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nExists(EndsWithSaurus): {0}",
            dinosaurs.Exists(EndsWithSaurus));
    }

    // Search predicate returns true if a string ends in "saurus".
    private static bool EndsWithSaurus(String s)
    {
        return s.ToLower().EndsWith("saurus");
    }
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

TrueForAll(EndsWithSaurus): False

Find(EndsWithSaurus): Amargasaurus

FindLast(EndsWithSaurus): Dilophosaurus

FindAll(EndsWithSaurus):
Amargasaurus
Dilophosaurus

2 elements removed by RemoveAll(EndsWithSaurus).

List now contains:
Compsognathus
Oviraptor
Velociraptor
Deinonychus
Gallimimus
Triceratops

Exists(EndsWithSaurus): False
 */

注解

Predicate<T>是方法的true委托,如果传递给该方法的对象与委托中定义的条件匹配,则返回该方法。 当前 List<T> 元素单独传递给 Predicate<T> 委托,与 条件匹配的元素将从 List<T>中删除。

此方法执行线性搜索;因此,此方法是 O (n) 运算,其中 nCount

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

另请参阅