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个参 ...
随机推荐
- C#面向对象21 接口
接口的规范: 1.接口是一种规范.只要一个类继承了一个接口,这个类就必须实现这个接口中所有的成员. 2.为了多态,接口不能被实例化,接口不new(不能创建对象) 3.接口中的成员不能加“访问修饰符”, ...
- DDOS攻击脚本
import sysimport osimport timeimport socketimport random#Code Timefrom datetime import datetimenow = ...
- 【JavaScript】js中的call方法
moziila官方文档链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Funct ...
- day1-css练习[新浪首页顶部栏]
直接贴代码吧: html代码 <div class="border-01"> <div class="border-001"> < ...
- 微信小程序页面跳转传参方式
//实现跳转的A页面 jump: function () { let a = 1; let b = 2; wx.navigateTo({ url: '/page/vipOrder/vipOrder?d ...
- 使用脚本启动fabric时出错
Error: got unexpected status: BAD_REQUEST -- error authorizing update: error validating ReadSet: rea ...
- centos 7 源代码 mysql-5.7.2 安装
CENTOS MYSQL 5.7 下载MySQL 5.7 https://dev.mysql.com/downloads/mysql/5.7.html#downloads cd /usr/local/ ...
- c++ mfc和win32项目
win32项目是一个底层的窗口的实现过程,它采用的库仅仅是windows.h,我们通过winain作为函数的入口,然后经过窗口类的内容的填写,窗口的注册,创建,显示刷新,到最后的消息循环,这是一个wi ...
- Codeforces Round #454 D. Power Tower (广义欧拉降幂)
D. Power Tower time limit per test 4.5 seconds memory limit per test 256 megabytes input standard in ...
- Python中关于csv的简单操作
Python中关于csv的简单操作 CSV操作简单,直接import csv即可, 主要使用reader和pandas 1 reader的简单使用 csv.reader("1.csv&quo ...