C#的Action和Func委托是什么?如何使用它们传递方法?

Action用于无返回值方法传递,Func用于有返回值方法传递;二者均支持0-16个参数,可结合Lambda表达式使用,广泛应用于回调、LINQ查询等场景,提升代码可读性与扩展性。

c#的action和func委托是什么?如何使用它们传递方法?

在C#中,ActionFunc 是系统内置的泛型委托类型,用于简化方法的传递和调用。它们常用于将方法作为参数传给其他方法,实现回调、事件处理、LINQ 查询等场景。

什么是 Action?

Action 是一个表示无返回值方法的委托。它可以接受 0 到 16 个输入参数。

常见形式:

Action:无参数,无返回值Action:一个参数,无返回值Action:两个参数,无返回值

示例:

void SayHello(){    Console.WriteLine("Hello");}

void Greet(string name){Console.WriteLine($"Hello, {name}");}

// 使用 Action 调用无参方法Action action1 = SayHello;action1(); // 输出: Hello

// 使用 Action 调用带参方法Action action2 = Greet;action2("Alice"); // 输出: Hello, Alice

什么是 Func?

Func 是一个有返回值的泛型委托。它至少有一个参数是返回类型(最后一个),最多支持 16 个输入参数加一个返回值。

常见形式:

Func:无输入参数,返回 TResultFunc:一个输入参数,返回 TResultFunc:两个输入参数,返回 TResult

示例:

int GetNumber(){    return 42;}

string GetName(int id){return id == 1 ? "Tom" : "Unknown";}

// 使用 Func 接收无参但有返回值的方法Func func1 = GetNumber;int number = func1(); // number = 42

// 使用 Func 接收带参并返回字符串的方法Func func2 = GetName;string name = func2(1); // name = "Tom"

如何使用它们传递方法?

你可以把普通方法、匿名方法、Lambda 表达式赋值给 Action 或 Func。

实际应用场景示例:定义一个通用执行器方法

void ExecuteAction(Action action){    Console.WriteLine("开始执行...");    action();    Console.WriteLine("执行结束。");}

int ExecuteFunc(Func func){Console.WriteLine("开始计算...");int result = func();Console.WriteLine("计算完成。");return result;}

调用示例:

ExecuteAction(SayHello);// 输出:// 开始执行...// Hello// 执行结束。

int result = ExecuteFunc(GetNumber);// 输出:// 开始计算...// 计算完成。

Lambda 表达式写法更简洁:

ExecuteAction(() => Console.WriteLine("内联消息"));

int square = ExecuteFunc(() => 5 * 5); // 返回 25

小结

Action 用于没有返回值的方法传递,Func 用于有返回值的方法传递。两者都支持多种参数数量,结合 Lambda 使用非常灵活。它们让代码更具可扩展性和可读性,尤其是在需要“把方法当参数”的场合,比如集合操作、异步编程、依赖注入等。

基本上就这些,掌握它们能让你写出更简洁、函数式风格的 C# 代码。

以上就是C#的Action和Func委托是什么?如何使用它们传递方法?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1442052.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 18:41:17
下一篇 2025年12月8日 16:26:43

相关推荐

发表回复

登录后才能评论
关注微信