委托,顾名思义,就是让其他代理,本质就是为具有共性方法组定义一个方法模板;(交流可以加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 xwhere 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();}}
}

转载于:https://www.cnblogs.com/xietianjiao/p/7095296.html

C#常见委托のdelegate定义,Func,Action,Predicate总结相关推荐

  1. 浅谈C#中常见的委托Func,Action,Predicate(转)

    一提到委托,浮现在我们脑海中的大概是听的最多的就是类似C++的函数指针吧,呵呵,至少我的第一个反应是这样的. 关于委托的定义和使用,已经有诸多的人讲解过,并且讲解细致入微,尤其是张子阳的那一篇.我就不 ...

  2. 七天学习计划_c#_[2][3][4][5]委托、事件、委托与事件的区别、泛型委托、Func\Action\predicate

    由于委托之前的博客已经详细写了,这里就简单的过一遍,复习一下: 了解委托 基于委托开发事件驱动程序变得非常简单. 使用委托可以大大简化多线程编程难度. 理解委托 委托也可以看做成一种数据类型,可以定义 ...

  3. unity学习-委托(delegate),事件(event),Action,Func

    unity学习 委托 含义 定义 使用 事件 含义 使用 在进行项目的过程中,一直存在着对代码管理不当的问题,所以需要学习一些科学的代码思维,减少后期功能的修改与迭代引发的代码冗杂和内存爆炸 可以看b ...

  4. lambda表达式不使用委托(delegate) 用FUNC

    lLambda不使用delegate关键字,而使用  Lambda运算符 => goes to l    1.Func<int,string> getInput = (int age ...

  5. C#基础知识学习之 ✨ 委托的兄弟姐妹们 delegate、Action、Func、Predicate

    委托 delegate.Action.Func.Predicate 简单介绍 delegate.Action.Func.Predicate 几种基础的委托结构 几种委托的实例用法 开始分析 deleg ...

  6. C#委托的介绍(delegate、Action、Func、predicate)

        (a).  delegate: delegate我们常用到的一种声明   Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型.   例:public delega ...

  7. C#委托(delegate、Action、Func、predicate)和事件

    C#委托(delegate.Action.Func.predicate)和事件 - 园子的蜗牛 - 博客园 C#之委托 - 摸鱼王 - 博客园 C++函数指针与C#委托之间有何联系 - 51CTO.C ...

  8. 泛型委托 Predicate/Func/Action

    Predicate 泛型委托   表示定义一组条件并确定指定对象是否符合这些条件的方法.此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素. 看看下面它的定义: // Summ ...

  9. delegate,event, lambda,Func,Action以及Predicate

    delegate 委托 可以理解为c++ 语言中的函数指针,标示了方法调用的回调函数的规范.强类型,便于编译时检查是它的最大优点,从此可以和void * 说再见了. event 事件 用以delega ...

  10. C#-----委托delegate的定义与使用

    委托是一种数据结构,它引用静态方法或引用类实例及该类的实例方法 委托的声明: delegate <函数返回类型> <委托名> (<函数参数>) //声明委托 del ...

最新文章

  1. eclipse java代码某一行需要修改注释_看看这些Java代码开发规范吧!你好,我好,大家好!...
  2. jvm性能调优实战 - 40 百万级数据误处理导致的频繁Full GC问题优化
  3. 访问数据库_访问数据库
  4. linux 编译工具链,Linux工具链for TKStudio下载_Linux工具链for TKStudio官方下载-太平洋下载中心...
  5. Vue(二十八)el-cascader 动态加载 - 省市区组件
  6. 前端学习(970):fastclick插件使用
  7. 我看《Linux0.11内核完全注释2.01》的方法
  8. android四大组件共性,Android四大组件及意图和意图过滤器
  9. 《编译学习计划【第一季】》- C语言中的qsort函数
  10. 程序员理想的工作环境应该是怎样的?
  11. 3ds Max 布尔(Boolean)运算——象棋的制作
  12. Python测试:快乐的数字
  13. 2020牛客暑期多校训练营(第九场) Groundhog and 2-Power Representation
  14. 矩阵行列式引理 Matrix Determinant Lemma
  15. 路由器常见的第三方系统( OpenWRT,LEDE,PandoraBox,Gargoyle | ASUSWrt,Merlin,Padavan | DD-WRT | Tomato )
  16. mysql 除号_MySql的运算符-阿里云开发者社区
  17. ZigBee网络拓扑结构
  18. 二叉树的构造以及基本操作
  19. 3D MAX入门训练(1)放样制作胡萝卜
  20. 差分+树状数组 线段树【P2357】 守墓人

热门文章

  1. 一个项目的404错误处理页面
  2. Spring思维导图(AOP篇)
  3. 【总结】大端、小端存储模式的那点事
  4. 调用iphone客户端进行授权发微博的方法--使用友盟组件
  5. CMOS checksum error-Defaults loaded 故障解决办法
  6. FLEX 2.01 全套下载!
  7. 文件上传下载——sz和rz
  8. 开关造成的毛刺_解决交易中的毛刺问题,你可以这样做
  9. python安装pil库-python第三方库PIL.Image安装
  10. phpquery类php,phpquery 最基础的例子