func<T> 和 action<T>
一、Func
Func<Result>,Func<T1,Result>是一个.Net内置的泛型委托。
- Func<TResult>
- Func<T,TResult>
- Func<T1,T2,TResult>
- Func<T1,T2,T3,TResult>
- Func<T1,T2,T3,T4,TResult>
它有5种形式,只是参数个数不同;第一个是无参数,但是有返回值;
下面是一个简单的普通委托来传方法的示例。
private delegate string Say();public static string SayHello(){ return "Hello";}static void Main(string[] args){ Say say = SayHello; Console.WriteLine(say()); Console.ReadKey();}所以,在有时候,我们不知道一个接口同时要做什么操作的时候,我可以给它留一个委托。
为了更方便,.Net直接默认有了委托。我们再来试试.Net默认带的委托。
public static string SayHello(){ return "Hello";}static void Main(string[] args){ Func<string> say = SayHello; Console.WriteLine(say()); Console.ReadKey();}public static string SayHello(string str){ return str + str;}static void Main(string[] args){ Func<string, string> say = SayHello; string str = say("abc"); Console.WriteLine(str); //输出abcabc Console.ReadKey();}Action<T>的用法与Func几乎一样,调用方法也类似。
- Action
- Action<T>
- Action<T1,T2>
- Action<T1,T2,T3>
- Action<T1,T2,T3,T4>
private delegate string Say();
public static void SayHello(string str)
{
Console.WriteLine(str); } static void Main(string[] args) { Action<string> say = SayHello; say("abc"); Console.ReadKey();}Func与Action作用几乎一样。只是
- Func<Result>有返回类型;
- Action<T>只有参数类型,不能传返回类型。所以Action<T>的委托函数都是没有返回值的。
四、Func与Action都支持Lambda的形式调用
还是以一个输入后,返回重复一次的值作为示例。
Func<string, string> say = m => m + m;Console.WriteLine(say("abc")); //输出abcabcstring XXX(Func<string, string>)public static int Sum<TSource>(this IEnumerable<TSource> source, Func<TSource, int> selector);1、扩展方法,与这篇文章无关(扩展的是IEnumerable<TSource>,主要是为了能够实现IEnumerable<TSource>接口的集合.出函数)。
2、Func<TSource, int> selector这个参数。
尝试写一个Linq的First函数吧,命名为First2。Linq源代码里有很多异常情况处理,好多设计模式,可惜我不懂,只提取简单逻辑了。
namespace ConsoleApplication2{ static class Extend { public static TSource First2<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) { //.Net本身的源代码好多异常情况处理,好多设计模式,我也不懂,只提取逻辑 foreach (TSource item in source) { if (predicate(item)) { return (item); } } throw new Exception("不存在满足条件的第一个元素!"); } } class Program { static void Main(string[] args) { List<int> ListInt = new List<int>(){ 1, 2, 3, 4, 5 }; int k = ListInt.First2(m => m > 4); //输出5 Console.WriteLine(k); Console.ReadKey(); } }}func<T> 和 action<T>的更多相关文章
- Func<T>与Action<T>委托泛型介绍:转
.Net 3.5之后,微软推出了Func<T>与Action<T>泛型委托.进一步简化了委托的定义. Action<T>委托主要的表现形式如下: public de ...
- Func<T>与Action<T>委托泛型介绍
.Net 3.5之后,微软推出了Func<T>与Action<T>泛型委托.进一步简化了委托的定义. Action<T>委托主要的表现形式如下: public de ...
- C#中常见的委托(Func委托、Action委托、Predicate委托)
今天我要说的是C#中的三种委托方式:Func委托,Action委托,Predicate委托以及这三种委托的常见使用场景. Func,Action,Predicate全面解析 首先来说明Func委托,通 ...
- 委托, 泛型委托,Func<T>和Action<T>
使用委托来做一些事情,大致思路是: 1.定义声明一个委托,规定输入参数和输出类型.2.写几个符合委托定义的方法.3.把方法列表赋值给委托4.执行委托 internal delegate int MyD ...
- System.Func<>与System.Action<>
使用并行编程可以同时操作多个委托,在介绍并行编程前先简单介绍一下两个泛型委托System.Func<>与System.Action<>. Func<>是一个能接受多 ...
- Func<T>、Action<T> 的区别于说明
一.Func Func是一个.Net内置的委托. Func<Result>,Func<T1,Result>是一个.Net内置的泛型委托. Func<TResult> ...
- Func 委托 和 Action 委托 初步谈论
继上篇EventHandler之后,继续填坑,简单了解下Func<TResult> 委托 和 Action 委托. msdn对于两者的解释: Func<TResult>:封装一 ...
- .NET : Func委托和Action委托
其实他们两个都是委托[代理]的简写形式. 一.[action<>]指定那些只有输入参数,没有返回值的委托 Delegate的代码: public delegate void myDeleg ...
- [C#学习笔记]Func委托与Action委托
学习一项新知识的时候,最好的方法就是去实践它. 前言 <CLR via C#>这本神书真的是太有意思了!好的我的前言就是这个. Fun 如果要用有输入参数,有返回值的委托,那么Func委托 ...
- Delegate Func Action Predicate default() 知识点
看仓储模式,有代码写到这几个关键字,陌生,记录下来. 定义一个类型,此类型抽象化了相似结构的某一类方法,因此我们能将此类型代表的方法作为参数进行传递. Delegate至少0个参 ...
随机推荐
- 反射获取config实体类属性并赋值
/// <summary> /// 将实体类存入config /// </summary> /// <param name="enity">&l ...
- centos7安装配置zabbix监控
CentOs7安装部署Zabbix3.4 1.关闭selinux和firewall systemctl stop firewalld setenforce 1.1检测selinux是否关闭 [ro ...
- ASP.NET中TextBox控件设立ReadOnly="true"后台取不到值
SP.NET中TextBox控件设置ReadOnly="true"H或Enabled=false后台取不到值 当TextBox设置了ReadOnly="true" ...
- ETL 工具和 BI 工具
ETL是数据仓库中的非常重要的一环,是承前启后的必要的一步.ETL负责将分布的.异构数据源中的数据如关系数据.平面数据文件等抽取到临时中间层后进行清洗.转换.集成,最后加载到数据仓库或数据集市中,成为 ...
- web项目部署在centos 7验证码显示不出来解决方案
今天把项目部署在centos7上,发现验证码显示不出来,看了一下tomcat日志 Exception in thread "http-nio-8080-exec-3" java.l ...
- 小程序UI设计(9)-文字排版
小程序中一般很少大段落的文字,基本是4.5个字的主题.一行标题.一行摘要.两行描述.显示时超出部分用省略号代替.下面结合工具使用介绍一下文字排版的方法.先看效果图. 工具中属性设置如下图:两行文字属 ...
- Linux 安装 wxPython4.0.4
Ubuntu 18.04 安装 wxPython4.0.4 因为 wxPython4.x 不提供 Linux 下的 bin 文件安装,以下记录 Ubuntu 18.04 的安装过程 (Ubuntu 1 ...
- CNN for NLP
卷积神经网络在自然语言处理任务中的应用.参考链接:Understanding Convolutional Neural Networks for NLP(2015.11) Instead of ima ...
- Solr初步
Solr是一个独立的,基于Lucene的全文搜索服务器企业级搜索应用服务器,它对外提供API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引(solr生成倒排索引,数 ...
- 第二章 Vue快速入门--7 讲解v-cloak、v-text、v-html的基本使用
7 讲解v-cloak.v-text.v-html的基本使用 <!DOCTYPE html> <html lang="en"> <head> & ...