C#详解:Func,Action与Predicate委托的实战应用

0 下载量 137 浏览量 更新于2024-08-31 收藏 423KB PDF 举报
在深入理解C#中常见的委托时,C#提供了一种功能强大的编程工具,即委托,它允许我们将方法作为参数传递给其他方法,实现了代码的灵活性和可复用性。本文将重点介绍C#中的三种主要委托类型:Func委托、Action委托和Predicate委托,以及它们各自的特点和使用场景。 首先,Func委托是用于处理具有返回值的方法,其类型定义有五个变体,对应不同数量的参数和返回类型。例如: 1. `Func<TResult>()`:用于无参数但返回值的函数,`TResult`表示返回类型。 2. `Func<T1, TResult>()`:接受一个参数`T1`并返回结果,`T1`是输入类型,`TResult`是返回类型。 3. `Func<T1, T2, TResult>()`:两个参数版本,依此类推。 创建Func委托的实例时,如下面所示: ```csharp Func<string> func = delegate { return "我是Func委托的结果"; }; Console.WriteLine(func()); // 输出"我是Func<TResult>委托出来的结果" ``` Func委托的例子展示了如何代理一个返回字符串的无参函数。 接下来是Action委托,它的主要用途是处理没有返回值的方法。Action委托的类型定义如下: 1. `Action()`:无参数,无返回值。 2. `Action<T1>()`:接受一个参数`T1`,无返回值。 3. `Action<T1, T2>()`:两个参数版本。 例如: ```csharp Action<string> action = delegate (string param) { Console.WriteLine("参数是:" + param); }; action("Hello, Action!"); // 输出"参数是:Hello, Action!" ``` Action委托主要用于执行操作,不关心其结果。 最后是Predicate委托,它代表一个用于测试某个条件的函数,通常用于LINQ查询中。其类型定义类似于Func委托,但通常带有`bool`返回值: 1. `Predicate<T>()`:接受一个`T`类型的参数并返回布尔值。 2. `Predicate<T1, T2>()`:两个参数版本。 例如,在查询中筛选整数列表: ```csharp List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; var evenNumbers = numbers.Where(x => x % 2 == 0).ToList(); // 使用Predicate筛选偶数 ``` Predicate委托在这里用于根据指定条件过滤数据。 总结来说,C#中的Func、Action和Predicate委托是三种不同的方式来处理方法调用,Func关注返回值,Action关注执行操作,而Predicate用于执行条件判断。理解并熟练运用这些委托类型,可以提高代码的清晰度和可维护性。在实际开发中,根据具体需求选择合适的委托类型能极大地简化代码结构。