C# 中Func 的用法

C# 中Func 的用法

在 C# 中,Func 是一个泛型委托类型,用于表示有返回值的方法,它是 .NET 框架提供的预定义委托,无需手动声明即可直接使用。Func 的核心作用是封装具有特定参数列表和返回值的方法,常用于 lambda 表达式、匿名方法或作为方法参数传递,使代码更简洁灵活。

一、基本定义与语法

Func 是泛型委托,定义格式为:

Func<参数类型1, 参数类型2, ..., 返回值类型>
  • 特点

    • 最少需要指定返回值类型(即至少有 1 个类型参数,代表返回值)。
    • 最多可以有 16 个输入参数 + 1 个返回值类型(共 17 个类型参数)。
    • 无参数但有返回值时,使用 Func<返回值类型>。

二、常用形式与示例

  • 无参数,有返回值(Func)
// 定义:无参数,返回string
Func<string> getTime = () => DateTime.Now.ToString("HH:mm:ss");
// 调用
string currentTime = getTime(); // 结果:当前时间字符串,如 "15:30:20"
  • 1 个参数,有返回值(Func<T, TResult>)
// 定义:输入int,返回其平方(int)
Func<int, int> square = x => x * x;

// 调用
int result = square(5); // 结果:25
  • 2 个参数,有返回值(Func<T1, T2, TResult>)
// 定义:输入两个string,返回拼接结果
Func<string, string, string> combine = (a, b) => $"{a}-{b}";

// 调用
string str = combine("Hello", "World"); // 结果:"Hello-World"
  1. 多参数(如 3 个参数)
// 定义:输入三个int,返回它们的和
Func<int, int, int, int> sum = (a, b, c) => a + b + c;

// 调用
int total = sum(1, 2, 3); // 结果:6

三、Func 的典型用法

  • 作为方法参数(传递逻辑)
    将 Func 作为参数传入方法,使方法可以动态执行不同逻辑,类似 “回调函数”。
// 定义一个使用Func的方法:对数组中的每个元素执行func逻辑并返回新数组
int[] ProcessArray(int[] array, Func<int, int> func)
{
    int[] result = new int[array.Length];
    for (int i = 0; i < array.Length; i++)
    {
        result[i] = func(array[i]); // 执行传入的逻辑
    }
    return result;
}

// 使用:传入不同的Func实现不同功能
int[] numbers = { 1, 2, 3, 4 };
int[] squares = ProcessArray(numbers, x => x * x); // 求平方:[1,4,9,16]
int[] doubles = ProcessArray(numbers, x => x * 2); // 翻倍:[2,4,6,8]
  • 配合 LINQ 查询
    LINQ 中大量使用 Func 作为参数,例如 Where、Select 等方法:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

// Where方法接收Func<int, bool>:筛选出偶数
var evenNumbers = numbers.Where(n => n % 2 == 0); // 结果:[2,4]

// Select方法接收Func<int, string>:转换为字符串
var numberStrings = numbers.Select(n => $"数字:{n}"); // 结果:["数字:1", "数字:2", ...]
  • 简化复杂逻辑的封装
    当需要多次复用某段逻辑时,用 Func 封装可减少代码冗余:
// 封装“字符串处理”逻辑
Func<string, string, string> processString = (input, suffix) => 
{
    if (string.IsNullOrEmpty(input))
        return "默认值";
    return input.Trim() + suffix;
};

// 多次复用
string res1 = processString("  test  ", "123"); // 结果:"test123"
string res2 = processString(null, "456"); // 结果:"默认值456"

四、Func 与 Action 的区别

1.Func:有返回值(至少需要指定返回值类型)。
2. Action:无返回值(专注于执行操作,参数列表与 Func 类似,但无返回值类型)。

示例对比:

// Func(有返回值)
Func<int, int> addOne = x => x + 1;

// Action(无返回值)
Action<int> printNumber = x => Console.WriteLine(x);

五、总结
Func 是 C# 中处理 “有返回值的方法封装” 的强大工具,其核心优势在于:

  1. 简化代码:无需手动声明委托类型,直接使用预定义的 Func。
  2. 灵活传递逻辑:作为参数传递时,可动态切换方法行为(如 LINQ、回调函数)。
  3. 配合 lambda 表达式:使代码更简洁,可读性更高。
    掌握 Func 的用法,能极大提升 C# 代码的灵活性和可维护性,尤其在 LINQ、委托回调等场景中必不可少。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值