public int RemoveAll(Predicate<T> match);Predicate是一个委托,我们再看下它的定义:
public delegate bool Predicate<T>(T obj);List<T>.RemoveAll方法在执行过程中,会将每项值传给函数match,若match返回true,则该项将被删除,否则不删除该项。下边我们来看个例子:
using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//初始化
List<int> ids = new List<int>();
for (int i = 1; i <= 10; i++)
ids.Add(i);
//删除前
foreach(int id in ids)
Console.WriteLine(id);
Console.WriteLine("-----------------------------");
//删除
ids.RemoveAll(Predicate);
//删除后
foreach (int id in ids)
Console.WriteLine(id);
Console.Read();
}
/// <summary>
/// 定义List.RemoveAll要移除的元素应满足的条件
/// 当传入的项满足移除条件时返回true
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
static bool Predicate(int id)
{
return id % 2 == 0 ? true : false;
}
}
}执行结果:
1
2
3
4
5
6
7
8
9
10
-----------------------------
1
3
5
7
9
类似的例子并不少见,JavaScript的Array.sort方法也是根据参数(函数)的返回值来判断任意两项的大小从而实现数组按自定义方式排序的。
评论(0)
暂无评论。