返回

.NET C# Predicate泛型委托使用方法

2025-03-10 .NET C# 委托 1255 0

Predicate泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法。此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素。 Predicate<T> 通常用于集合的筛选或搜索操作,比如在 List<T> 的 Find 或 Exists 方法中使用。

Predicate 常见用法

在列表中查找元素:

可以使用 Predicate<T> 在集合中查找符合特定条件的元素。

using System;
using System.Collections.Generic;

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

// 使用 Predicate 查找第一个偶数
Predicate<int> isEven = num => num % 2 == 0;

// 查找第一个偶数
int evenNumber = numbers.Find(isEven);

Console.WriteLine("第一个偶数是: " + evenNumber);

输出结果:第一个偶数是: 2

检查列表中是否存在某个元素:

Predicate<T> 可以用来检查集合中是否有元素满足特定的条件。

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

// 使用 Predicate 判断是否有大于 5 的数字
Predicate<int> isGreaterThanFive = num => num > 5;

// 检查是否存在符合条件的数字
bool exists = numbers.Exists(isGreaterThanFive);

Console.WriteLine("是否有大于 5 的数字? " + exists);

输出结果:是否有大于 5 的数字? True

与 List<T>.RemoveAll 一起使用:

Predicate<T> 可以用来从集合中删除满足某个条件的元素。

using System;
using System.Collections.Generic;

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

// 使用 Predicate 删除所有偶数
Predicate<int> isEven = num => num % 2 == 0;

// 删除所有偶数
numbers.RemoveAll(isEven);

Console.WriteLine("删除偶数后的剩余数字:");
foreach (var num in numbers)
{
    Console.WriteLine(num);
}

输出结果:

删除偶数后的剩余数字:
1
3
5
7
9

使用 Lambda 表达式和 Predicate:

可以通过 lambda 表达式来简洁地定义一个 Predicate<T>,如上面示例中的 num => num % 2 == 0。

总结

  • Predicate<T> 是一个委托类型,它接受一个类型为 T 的参数并返回一个布尔值。
  • 它常用于对集合进行筛选、查找或者验证元素是否满足特定条件。
  • List<T> 类中有如 Find、Exists 和 RemoveAll 等方法可以接受 Predicate<T>,用于对集合进行操作。
顶部