欢迎来到石家庄建站小程序开发公司

asp.net

Func<>介绍

作者: 发布时间:2026-01-25 点击:

Func<> 是 C# 中的一种‌泛型委托‌,它封装了一个具有参数并有返回值的方法。它是 .NET 框架预定义的委托类型之一,用于简化代码,避免手动定义委托签名。


核心特性

‌返回值‌:Func<> 总是会返回一个值,其返回类型是泛型参数列表中的‌最后一个参数‌

‌参数‌:可以接受 0 到 16 个输入参数,参数类型由前面的泛型参数指定。

‌用途‌:常用于将方法作为参数传递,尤其在 LINQ 查询、事件处理、回调函数和策略模式中非常常见。


常见用法示例

‌1、无参数,有返回值

Func<int> getRandom = () => new Random().Next(1, 100);

int number = getRandom(); // 调用委托,返回一个随机数


2、‌一个参数,有返回值

Func<string, int> stringLength = s => s.Length;

int length = stringLength("Hello, World!"); // 返回 13


3、‌多个参数,有返回值

Func<int, int, int> add = (a, b) => a + b;

int sum = add(5, 3); // 返回 8


4、作为方法参数(LINQ 典型应用)

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

var evenNumbers = numbers.Where(n => n % 2 == 0); // Where 方法接受 Func<int, bool>


5、在自定义方法中使用

public static string ProcessData(string input, Func<string, string> transformer)

{

    return transformer(input);

}


// 使用

string result = ProcessData("hello", s => s.ToUpper()); // 返回 "HELLO"



与 Action<> 和 Expression<Func<>> 的区别

特性       Func<>      Action<>      Expression<Func<>>

‌返回值‌    有                无                   有

‌本质‌   可执行的委托     可执行的委托   表达式树(代码数据结构)

‌用途‌   直接执行逻辑     执行无返回值的操作   用于分析或转换代码(如 LINQ to SQL)

示例‌

Func<string, int> f = s => s.Length;

Action<string> a = s => Console.WriteLine(s);

Expression<Func<string, int>> e = s => s.Length;



‌注意‌:Expression<Func<>> 可以被编译为 Func<>(通过 .Compile() 方法),但反之则不行,因为编译后的 IL 代码无法还原为原始表达式树。‌


应用场景

1)‌LINQ 查询‌:Where、Select、OrderBy 等方法都接受 Func<> 参数。

‌2)回调机制‌:在异步操作或事件完成后执行自定义逻辑。

3)‌策略模式‌:将算法或行为作为参数传入,实现灵活的业务逻辑。

‌4)依赖注入与解耦‌:通过传递 Func<> 避免直接依赖具体类,提高可测试性。‌

总之,Func<> 是 C# 中实现函数式编程风格的重要工具,它让代码更简洁、灵活且易于复用。


新闻资讯
相关案例