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 ...
随机推荐
- 西门子PLC-1200 SCL语言开发学习笔记 (一)
一.简介和背景 PLC一般使用梯形图开发,但是梯形图适合电工使用而不是程序员使用,对我们来说开发困难,门槛高,幸好PLC的开发标准还带了类pascal的高级语言,在西门子这里叫SCL语言,这对于我们程 ...
- Structs+Spring+Hibernate快速入门
Structs+Spring+Hibernate,这是很经典的一个搭配,它的开发流程也比较程式化,下面以用户注册为例. 注册页面代码: <%@page contentType=" ...
- IP白名单添加了当前IP,获取access_token时依然报出错误码40164的坑
开发公众号网页时,想要调用微信API接口,令人无奈的是,想要调用各接口都需使用access_token,于是,获取access_token的征途开始了…… 1.开发者基本配置 (1) 公众平台官网登录 ...
- Linux 命令行下光标移动快捷键
常用的快捷键: Ctrl + u 删除光标之前到行首的字符 Ctrl + k 删除光标之后到行尾的字符 Ctrl + a 光标移动到行首 Ctrl + e 光标移动到行尾 Ctrl + l 清屏 Al ...
- jQuery学习(1)猜数字游戏
jQuery是一个快捷.小型且特征丰富的JavaScript库.它使得HTML文档遍历及操作,事件处理,动画,Ajax等更简洁方便.它通过调用一个简单易用的API,就能在各种浏览器中使用.由于jQ ...
- 延迟初始化Lazy
延迟初始化出现于.NET 4.0,主要用于提高性能,避免浪费计算,并减少程序内存要求.也可以称为,按需加载. 基本语法: Lazy<T> xx = new Lazy<T>(); ...
- c# 键值数据保存XML文件
/// <summary> /// 键值数据保存XML文件 /// </summary> /// <param name="fileName"> ...
- jquery全选或不全选时,不操作已经禁用的checkbox
$("#selectAll").click(function(){ if(this.checked ){ $(":checkbox[name='equid']" ...
- 外边距塌陷 margin collapsing
块的顶部外边距和底部外边距有时被组合(折叠)为单个外边距,其大小是组合到其中的最大外边距, 这种行为称为外边距塌陷(margin collapsing),有的地方翻译为外边距合并. 1.相邻的兄弟姐妹 ...
- css文本溢出隐藏显示省略号(单行+多行)
文本超出若干行就换行,这个功能几乎每个文本浏览网站都会用到,实现它的办法也有很多,今天简单的介绍一下实现它的方法. 一. 单行文本不换行,并将超出文本隐藏 .box-content{ ove ...