C#常见委托のdelegate定义,Func,Action,Predicate总结
委托,顾名思义,就是让其他代理,本质就是为具有共性方法组定义一个方法模板;(交流可以加qq群:568055323)
委托常见的方式有一般委托显示定义,Func<T,TResult> (T,表示传入参数的类型,TResult)表示返回的类型,可以最多有四个参数传入,
Action<T>,与Func的唯一区别是没有返回值;Predicate <T>就比较多单一了, 只能传入一个参数,然后返回一个bool值。
下面是示例代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace FuncTest { class Program { // 委托声明 -- 定义一个签名: delegate double MathAction(double num); static double Double(double input) { return input* 2; } static void Main(string[] args) { //***********************普通委托 //使用一个方法实例化委托 MathAction ma = Double; double result = ma(4.5); Console.WriteLine(result.ToString()); //匿名方法 MathAction ma2 = delegate(double input) { return input * 3; }; Console.WriteLine(ma2(3)); //lambda表达式 MathAction ma3 = s => s * s * s; Console.WriteLine(ma3(2)); //**********************Func<T,Tresult>委托 //利用Func,不用再显示定义委托 Func<double, double> ma4 = Double; Console.WriteLine(ma4(5).ToString()); //利用Func,匿名方法 Func<double,double> ma5 = delegate (double input) { return input * input; }; Console.WriteLine(ma5(5)); //利用Func,lambda表达式 Func<double, double> ma6 = s => s * s * s; Console.WriteLine(ma6(5)); //和其他表达式结合 // 声明了一个Func委托类型的变量selector并用Lambda表达式进行实例化 // 这个Lambda表达式将用来获取一个字符串并将这个字符串转化为大写并返回 Func<string, string> selector = str => str.ToUpper(); // 创建一个字符串数组 string[] words = { "orange", "apple", "Article", "elephant" }; // 依次遍历这个字符串数组并调用委托实例selector进行处理 IEnumerable<String> aWords = words.Select(selector); // 输出结果到控制台 foreach (String word in aWords) Console.WriteLine(word); //**********************Action<T> 委托,与Func<T,TResult>唯一的区别就是没有返回值 Action<string> ma7 = delegate (string input) { Console.WriteLine(input); }; ma7("from Action<string>"); //***********************Predicate<T>, 形式只有一个,传入一个参数,返回一个bool值 Predicate<string[]> predicate = delegate (string[] x) { var r = from p in x where p.Contains("s") select p; if (r.ToList().Count > 0) { return true; } else { return false; } }; string[] _value = { "charlies", "nancy", "alex", "jimmy", "selina" }; if (predicate(_value)) { Console.WriteLine("They contain."); } else { Console.WriteLine("They don't contain."); } Console.ReadLine(); } } }
分类:
C#中的委托
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧