C# Action和 Func的用法

news/2025/2/7 18:00:19/

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/news/1570118.html

相关文章

Unity Shader Graph 2D - 使用DeepSeek协助绘制一个爱心

最近十分流行使用DeepSeek AI&#xff0c;于是想尝试着能不能用DeepSeek来帮助我实现一些Shader Graph效果&#xff0c;正好之前看到了爱心图形&#xff0c;就说干脆用DeepSeek来告诉我怎么使用Shader Graph来绘制一个爱心。 问DeepSeek怎么绘制爱心 首先打开DeepSeek的网站&a…

python学opencv|读取图像(五十四)使用cv2.blur()函数实现图像像素均值处理

【1】引言 前序学习进程中&#xff0c;对图像的操作均基于各个像素点上的BGR值不同而展开。 对于彩色图像&#xff0c;每个像素点上的BGR值为三个整数&#xff0c;因为是三通道图像&#xff1b;对于灰度图像&#xff0c;各个像素上的BGR值是一个整数&#xff0c;因为这是单通…

【机器学习与数据挖掘实战】案例11:基于灰色预测和SVR的企业所得税预测分析

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支,专注于让计算机系统通过数据学习和改进。它利用统计和计算方法,使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数据集中发现模式、关联…

CSS outline详解:轮廓属性的详细介绍

什么是outline&#xff1f; outline&#xff08;轮廓&#xff09;是CSS中一个有趣的属性&#xff0c;它在元素边框&#xff08;border&#xff09;的外围绘制一条线。与border不同的是&#xff0c;outline不占用空间&#xff0c;不会影响元素的尺寸和位置。这个特性使它在某些…

MySQL三大日志——binlog、redoLog、undoLog详解

日志是mysql数据库的重要组成部分&#xff0c;记录着数据库运行期间各种状态信息&#xff0c;能帮助我们进行很多容错及分析工作&#xff0c;其中有三大日志与我们这些开发者息息相关&#xff0c;本文将介绍binlog、redoLog、undoLog三种日志&#xff1a; 1. redoLog 1.1 为什么…

DeepSeek 遭 DDoS 攻击背后:DDoS 攻击的 “千层套路” 与安全防御 “金钟罩”_deepseek ddos

当算力博弈升级为网络战争&#xff1a;拆解DDoS攻击背后的技术攻防战——从DeepSeek遇袭看全球网络安全新趋势 在数字化浪潮席卷全球的当下&#xff0c;网络已然成为人类社会运转的关键基础设施&#xff0c;深刻融入经济、生活、政务等各个领域。从金融交易的实时清算&#xf…

HTML5+SVG+CSS3实现雪中点亮的圣诞树动画效果源码

源码介绍 这是一款基于HTML5SVGCSS3实现雪中点亮的圣诞树动画效果源码。画面中的圣诞树矗立在雪地中&#xff0c;天上飘落着雪花。当鼠标滑过圣诞树时&#xff0c;可见到圣诞树上的灯光闪烁&#xff0c;同时左下角探出雪怪模样的半个脑袋&#xff0c;四处张望着。整体画面栩栩…

【Docker】 Manifest与Buildx:多架构镜像管理的解析与实践

一.manifest的概述 manifest包含了镜像的层、标签、作者等关键信息&#xff0c;并支持多架构镜像的管理。通过Manifest List&#xff0c;开发者能够为同一应用提供适用于不同架构的镜像&#xff0c;从而确保其在各类平台上的兼容性。实际上是把不同操作系统和架构打包成独立的一…