C# Action和 Func的用法

devtools/2025/2/6 6:02:57/

C#中的数据类型 函数数据类型

Action 是一个数据类型 但是是没有返回值得函数数据类型

Func 用于指定一个有返回值的委托

  internal class Program{static void Main(string[] args){TT.F1(NoVoid);TT.F2(Void1);Void2(() => { Console.WriteLine("Void2执行了"); });}static void NoVoid(){}static void Void1(int i){Console.WriteLine("值是"+i);}static void Void2(Action act){Console.WriteLine("正在执行Void2");act(); //回调 这个委托方法}}class TT{public static void F1(Action act) { }public static void F2(Action<int> act) { }}

delegate和Action的写法

delegate写法

 public delegate void MyDelegate(string str);static void Main(string[] args){MyDelegate myDelegate = new MyDelegate(Sum);myDelegate("123");}static void  Sum(string str){Console.WriteLine(str);}

修改为 Action写法

   static void Main(string[] args){Action<int> i = Void1;i(5);}static void Void1(int i){Console.WriteLine("i的值是"+i);}

Action的写法更简洁


Func

Func是有返回值的

Func<T1>(有返回值) --------T1为返回值的类型,无参数类型

Func<T1,T2>(有返回值)-----T1是参数类型,T2是返回值类型

Func<T1,T2,T3>(有返回值)--T1和T2是参数类型,T3是返回值类型

代码示例

internal class Program
{static void Main(string[] args){Test.Fn1(fn1);Test.Fn2(fn2);}static int fn1(){return 12;}static string fn2(int a){return "123456";}
}
class Test
{public static void Fn1(Func<int> fn) { }public static void Fn2(Func<int,string> fn) { }
}

Lambda表达式

 Func<int,int>fn3=y=>y;Action<int, int> fn2 = (int x, int y) =>{Console.WriteLine(x + y);};

Func和泛型委托(4种方法)

 delegate bool CallBack(string a);delegate bool CallBack<T>(T obj);internal class Program{static void Main(string[] args){//查询是张字开头的string[] names = { "花木兰", "蒙恬", "白起", "张飞", "马超" };Console.WriteLine(Test.Main1(names, Fn1));Console.WriteLine(Test.Main2<string>(names, Fn1));Console.WriteLine(Test.Main3(names, Fn1));Console.WriteLine(Test.Main4<string>(names,Fn1));Console.WriteLine(Test.MyIndex(names,Fn1));}public static bool Fn1(string s){return s.StartsWith("张");}}class Test{public static string Main1(string[] args,Func<string,bool>f){for (int i = 0; i < args.Length; i++){if(f(args[i])){return args[i];}}return default;}public static T Main2<T>(T[]args,Func<T,bool>f){for(int i = 0;i < args.Length;i++){if (f(args[i])){return args[i];}}return default;}public static string Main3(string[]args,CallBack f){for (int i = 0; i < args.Length; i++){if (f(args[i])){return args[i];}}return default;}public static T Main4<T>(T[]args,CallBack<T> f){for (int i = 0; i < args.Length; i++){if (f(args[i])){return args[i];}}return default(T);}public static int MyIndex(string[] arrs, Func<string, bool> f){for (int i = 0; i < arrs.Length; i++){if (f(arrs[i])){return i;}}return -1;}}


http://www.ppmy.cn/devtools/156471.html

相关文章

ImGui 学习笔记(二)—— 多视口

在计算机图形学中&#xff0c;视口&#xff08;Viewport&#xff09;是一个可观察的多边形区域。 将物体渲染至图像的过程中&#xff0c;会用两种区域表示。世界坐标窗口是用户所关注的区域&#xff08;即用户想要可视化的东西&#xff09;&#xff0c;坐标系由应用程序确定。…

图数据集整理

一. 大图数据集: 1.Big Graph Data Setshttps://lgylym.github.io/big-graph/dataset.html SNAP的数据集很不错的 2. Network Data Repository | The First Interactive Network Data Repository 可视化的的数据集 二. 图异常检测数据集和工作汇总: https://github.com/Xi…

JavaScript系列(60)--云原生应用开发详解

JavaScript云原生应用开发详解 ☁️ 今天&#xff0c;让我们深入探讨JavaScript的云原生应用开发。云原生是一种构建和运行应用程序的方法&#xff0c;充分利用云计算模型的优势&#xff0c;使应用具有更好的可扩展性、弹性和敏捷性。 云原生基础架构 &#x1f31f; &#x1…

【MySQL】第一弹---MySQL 在 Centos 7环境安装

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】 目录 1. 卸载不要的环境 2. 检查系统安装包 3. 卸载这些默认安装包 4. 获取mysql官方yum源 5. 安装mysql yum 源&am…

C++多线程编程——基于策略模式、单例模式和简单工厂模式的可扩展智能析构线程

1. thread对象的析构问题 在 C 多线程标准库中&#xff0c;创建 thread 对象后&#xff0c;必须在对象析构前决定是 detach 还是 join。若在 thread 对象销毁时仍未做出决策&#xff0c;程序将会终止。 然而&#xff0c;在创建 thread 对象后、调用 join 前的代码中&#xff…

C++ Primer 算术运算符

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

Linux 安装 RabbitMQ

Linux下安装RabbitMQ 1 、获取安装包 # 地址 https://github.com/rabbitmq/erlang-rpm/releases/download/v21.3.8.9/erlang-21.3.8.9-1.el7.x86_64.rpm erlang-21.3.8.9-1.el7.x86_64.rpmsocat-1.7.3.2-1.el6.lux.x86_64.rpm# 地址 https://github.com/rabbitmq/rabbitmq-se…

04树 + 堆 + 优先队列 + 图(D1_树(D10_决策树))

目录 一、引言 二、算法原理 三、算法实现 四、知识小结 一、引言 决策树算法是一种常用的机器学习算法&#xff0c;可用于分类和回归问题。它基于特征之间的条件判断来构 建一棵树&#xff0c;树的每个节点代表一个特征&#xff0c;每个叶节点代表一个类别或回归值。决策…