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* ;
- }
- static void Main(string[] args)
- {
- //***********************普通委托
- //使用一个方法实例化委托
- MathAction ma = Double;
- double result = ma(4.5);
- Console.WriteLine(result.ToString());
- //匿名方法
- MathAction ma2 = delegate(double input)
- {
- return input * ;
- };
- Console.WriteLine(ma2());
- //lambda表达式
- MathAction ma3 = s => s * s * s;
- Console.WriteLine(ma3());
- //**********************Func<T,Tresult>委托
- //利用Func,不用再显示定义委托
- Func<double, double> ma4 = Double;
- Console.WriteLine(ma4().ToString());
- //利用Func,匿名方法
- Func<double,double> ma5 = delegate (double input)
- {
- return input * input;
- };
- Console.WriteLine(ma5());
- //利用Func,lambda表达式
- Func<double, double> ma6 = s => s * s * s;
- Console.WriteLine(ma6());
- //和其他表达式结合
- // 声明了一个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 > )
- {
- 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#常见委托のdelegate定义,Func,Action,Predicate总结的更多相关文章
- 浅谈C#中常见的委托<Func,Action,Predicate>(转)
一提到委托,浮现在我们脑海中的大概是听的最多的就是类似C++的函数指针吧,呵呵,至少我的第一个反应是这样的. 关于委托的定义和使用,已经有诸多的人讲解过,并且讲解细致入微,尤其是张子阳的那一篇.我就不 ...
- 委托、多播委托、泛型委托Func,Action,Predicate,ExpressionTree
当试图通过一个事件触发多个方法,抽象出泛型行为的时候,或许可以考虑使用委托. 通过委托构造函数或委托变量把方法赋值给委托 private delegate double DiscountDel ...
- C# delegate event func action 匿名方法 lambda表达式
delegate event action func 匿名方法 lambda表达式 delegate类似c++的函数指针,但是是类型安全的,可以指向多个函数, public delegate void ...
- lambda表达式不使用委托(delegate) 用FUNC
lLambda不使用delegate关键字,而使用 Lambda运算符 => goes to l 1.Func<int,string> getInput = (int age ...
- C#の----Func,Action,predicate在WPF中的应用
首先介绍下,winform中可以用this.invoke来实现:wpf中要使用调度器Control.Despite.invoke: (Action)(()=> { })和 new Action ...
- 为什么不能把委托(delegate)放在一个接口(interface)当中?
stackoverflow上有人问,为什么不能把委托放在一个接口当中? 投票最多的第一个答案第一句话说,“A Delegate is just another type, so you don't g ...
- C#基础知识六之委托(delegate、Action、Func、predicate)
1. 什么是委托 官方解释 委托是定义方法签名的类型,当实例化委托时,您可以将其实例化与任何具有兼容签名的方法想关联,可以通过委托实例调用方法. 个人理解 委托通俗一点说就是把一件事情交给别人来帮助完 ...
- C#委托的介绍(delegate、Action、Func、predicate)
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1.委托的声明 (1). delegate delegate我们常用到的一种声明 Deleg ...
- C#委托的介绍(delegate、Action、Func、predicate) --转载
来源:http://www.cnblogs.com/akwwl/p/3232679.html 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1 ...
随机推荐
- 深度学习论文翻译解析(一):YOLOv3: An Incremental Improvement
论文标题: YOLOv3: An Incremental Improvement 论文作者: Joseph Redmon Ali Farhadi YOLO官网:YOLO: Real-Time Obje ...
- Go语言学习笔记(二) [变量、类型、关键字]
日期:2014年7月19日 1.Go 在语法上有着类 C 的感觉.如果你希望将两个(或更多)语句放在一行书写,它们 必须用分号分隔.一般情况下,你不需要分号. 2.Go 同其他语言不同的地方在于变 ...
- Extjs4.2+webAPI+EF实现分页以及webapi的数据传值
由于不明白分页的总数是怎么计算,不知道他的分页方式所以花费了好多功夫,现在弄出来了与大家分享下 1.首先是EF的简历,想必大家都清楚:添加-〉新建项-〉数据-〉Ado.net实体数据模型 2.就是后台 ...
- 【ichart】简单的统计图表ichart.js的使用
1.首先下载,点击下载 2.只需要这一个js,粘贴赋值到自己项目中即可. 3.引入js <script type="text/javascript" src=" ...
- Nginx学习笔记(三)--- Nginx实现反向代理和配置负载均衡
1.反向代理 2.Nginx反向代理流程图 3.安装多个tomcat 3.1把tomcat的压缩包传到Linux上 3.2 解压tomcat 3.3 给压缩好的tomcat改个名字用来区分一下 3.4 ...
- LSApplicationQueriesSchemes--关于info.plist 第三方登录 添加URL Schemes白名单
近期苹果公司iOS 9系统策略更新,限制了http协议的访问,此外应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装. 当你的应用在iOS 9 ...
- asynchronous.js
// 异步加载js (function(){ var _asyn_js_data = ['index.js','index1.js','index2.js','index3.js'] for(var ...
- 洛谷P3346 [ZJOI2015]诸神眷顾的幻想乡(广义后缀自动机)
题意 题目链接 Sol 广义SAM的板子题. 首先叶子节点不超过20,那么可以直接对每个叶子节点为根的子树插入到广义SAM中. 因为所有合法的答案一定是某个叶子节点为根的树上的一条链,因此这样可以统计 ...
- 前端打包文件在 nginx 上 403 的解决办法
遇到的问题表现出来就是如题所述,因此作为题目. 我们知道,前端有很多方便的构建和打包工具,如 webpack 等,通常我们会把前端文件打包到dist目录下,部署到服务器上,如 nginx 等. 这次遇 ...
- Chrome浏览器跨域
配置新版Chrome浏览器跨域,需要创建用户数据文件夹,在其中保存浏览器的缓存.历史记录.收藏夹等数据. Windows系统Chrome跨域 1 下载Chrome 64位绿色版,解压缩,并在桌面创建快 ...