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 ...
随机推荐
- Jmeter获取接口返回数组的长度
添加BeanShell PostProcessor来获取,具体代码如下: import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath ...
- python装饰器带括号和不带括号的语法和用法
装饰器的写法补充: 通常装饰器的写法是@func(),而有的时候为了减少出错率,可能会写成@func,没有()括号,这时我们可以这样定义,来减少括号.下面通过两个例子还看. 一般装饰器的写法: def ...
- docker常用命令记录
Docker官方镜像中心:https://hub.docker.com/explore/ 参考:慕课网docker视频教程 https://www.imooc.com/video/14625 1.启动 ...
- About me & 一些置顶的博文
About me 一只历史上最弱的 \(\text{hnoier}\) ... 身在 \(\text{hn}\) 弱校,除了在四大名校夹缝中生存,还要受到同校 \(\text{Julao}\) 的鄙视 ...
- 数据库MongoDB
一.MongoDB简介 MongoDB是由c++语言编写的,是一个基于分布式文件存储的开源数据库系统,在高负载的情况下,添加更多的节点,可以保证服务器性能.MongoDB旨在为web应用提供扩展的高性 ...
- [javaEE] Servlet的手动配置
一.Servlet sun提供的一种动态web资源开发技术,本质上就是一段java小程序,可以将Sevlet加入到Servlet容器中 *Servlet容器 -- 能够运行Servlet的环境就叫做S ...
- MySQL ORDER BY主键id加LIMIT限制走错索引
背景及现象 report_product_sales_data表数据量2800万: 经测试,在当前数据量情况下,order by主键id,limit最大到49的时候可以用到索引report_produ ...
- VUE页面刷新问题
1). location方式 location.reload() 缺点:刷新页面,卡白 2). router方式 this.$router.go(0) 缺点:同一问题,比一好点 3). provide ...
- 【代码笔记】Web-ionic tab(选项卡)
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- 【读书笔记】iOS-处理内存警告
-(void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning]; } 在这里你需要释放掉所有占用了很大内存的对象,如果你忽略了这个警告, ...