C# Predicate 委托
介绍
在 C# 中,Predicate 委托是一种特殊的委托类型,用于表示一个返回布尔值的方法。它通常用于对集合中的元素进行条件判断,例如筛选出满足特定条件的元素。Predicate 委托的签名如下:
public delegate bool Predicate<in T>(T obj);
其中,T
是输入参数的类型,obj
是输入参数,返回值是一个布尔值(true
或 false
)。
Predicate 委托通常与 List<T>.FindAll
、Array.FindAll
等方法一起使用,用于筛选集合中的元素。
基本用法
让我们从一个简单的例子开始,了解如何使用 Predicate 委托。
示例 1:筛选偶数
假设我们有一个整数列表,我们希望筛选出其中的偶数。我们可以使用 Predicate 委托来实现这一点。
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// 使用 Predicate 委托筛选偶数
Predicate<int> isEven = num => num % 2 == 0;
List<int> evenNumbers = numbers.FindAll(isEven);
// 输出结果
Console.WriteLine("偶数列表:");
foreach (int num in evenNumbers)
{
Console.WriteLine(num);
}
}
}
输出:
偶数列表:
2
4
6
8
10
在这个例子中,我们定义了一个 Predicate<int>
委托 isEven
,它接受一个整数并返回一个布尔值,表示该整数是否为偶数。然后,我们使用 List<int>.FindAll
方法筛选出所有满足条件的偶数。
FindAll
方法返回一个新的列表,其中包含所有满足 Predicate 条件的元素。
逐步讲解
1. 定义 Predicate 委托
Predicate 委托的定义非常简单。它接受一个输入参数(类型为 T
),并返回一个布尔值。例如:
Predicate<int> isPositive = num => num > 0;
在这个例子中,isPositive
是一个 Predicate 委托,它接受一个整数并返回 true
如果该整数大于 0,否则返回 false
。
2. 使用 Predicate 委托
Predicate 委托通常用于集合操作,例如筛选、查找等。以下是一些常见的用法:
- 筛选元素:使用
FindAll
方法筛选出满足条件的元素。 - 查找元素:使用
Find
方法查找第一个满足条件的元素。 - 检查元素是否存在:使用
Exists
方法检查集合中是否存在满足条件的元素。
3. 实际案例
让我们通过一个实际案例来进一步理解 Predicate 委托的用法。
案例:筛选出年龄大于 18 岁的人
假设我们有一个 Person
类,表示一个人的信息。我们希望筛选出年龄大于 18 岁的人。
using System;
using System.Collections.Generic;
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Person(string name, int age)
{
Name = name;
Age = age;
}
}
class Program
{
static void Main()
{
List<Person> people = new List<Person>
{
new Person("Alice", 25),
new Person("Bob", 17),
new Person("Charlie", 30),
new Person("David", 15)
};
// 使用 Predicate 委托筛选年龄大于 18 岁的人
Predicate<Person> isAdult = person => person.Age > 18;
List<Person> adults = people.FindAll(isAdult);
// 输出结果
Console.WriteLine("成年人列表:");
foreach (Person person in adults)
{
Console.WriteLine($"{person.Name}, {person.Age} 岁");
}
}
}
输出:
成年人列表:
Alice, 25 岁
Charlie, 30 岁
在这个案例中,我们定义了一个 Predicate<Person>
委托 isAdult
,它接受一个 Person
对象并返回 true
如果该对象的 Age
属性大于 18。然后,我们使用 FindAll
方法筛选出所有满足条件的成年人。
总结
Predicate 委托是 C# 中一个非常有用的工具,特别是在处理集合时。它允许我们定义一个条件,并将该条件应用于集合中的元素,从而筛选出满足条件的元素。
通过本文的学习,你应该已经掌握了 Predicate 委托的基本用法,并能够在实际项目中应用它。
在使用 Predicate 委托时,请确保条件逻辑清晰且易于理解,以避免潜在的逻辑错误。
附加资源与练习
练习
- 创建一个整数列表,使用 Predicate 委托筛选出所有大于 10 的数。
- 创建一个字符串列表,使用 Predicate 委托筛选出所有长度大于 5 的字符串。
- 创建一个自定义类(例如
Product
),并使用 Predicate 委托筛选出价格低于某个阈值的产品。
附加资源
通过练习和进一步的学习,你将能够更加熟练地使用 Predicate 委托,并在实际项目中灵活应用它。