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个参 ...
随机推荐
- sql lesson21homework
2017-08-15 18:03:17 mysql> show databases;+--------------------+| Database |+---------- ...
- 抓包工具之tcpdump
tcpdump 官网 -> http://www.tcpdump.org 1. 安装步骤 在官网分别下载 Tcpdump.Libpcap 这两个包链接 在安装Tcpdump之前,先安装Libpc ...
- 帝国cms 权限操作
<? if ($classid==5 || $classid==6 || $classid==7 || $classid==8 || $classid==9 || $classid==10 || ...
- Hadoop入门到实战全套大数据Hadoop学习视频
资料获取方式,关注公总号RaoRao1994,查看往期精彩-所有文章或者后台回复[Hadoop]获取,即可获取资源下载链接 更多资源获取,请关注公总号RaoRao1994
- vue2-editor使用
<template> <div class="wrapper wrapper-content" id="notes" v-cloak> ...
- JDBC的两种sql命令发送器比较【Statement:PreparedStatement】
PreparedStatement 接口继承 Statement接口如果需要多次执行一个SQL语句,可以使用PreparedStatement对象.在创建PreparedStatement对象时,通过 ...
- 十,StatefulSet简介及简单使用
目录 StatefulSet简介 为什么要用statefulset控制器 简单测试 使用 StatefulSet 创建基础的PV StatefulSet 清单 statefulset管理pod的启停顺 ...
- 关于单机部署fastdfs遇到的问题
查找错误日志显示:/html/group1/M00/00/00/wKjJWFzdF0qAE1pBAACmOw57Lw0520_big.jpg" failed (2: No such file ...
- pv与pvc
目的: 为了屏蔽底层存储实现的细节, 让用户方便使用同时让管理员方便管理, 引入了pv与pvc两种资源对象实现对存储的管理子系统 pv: 对底层网络共享存储的抽象, 将共享存储定义为一种资源 pvc: ...
- python3之POST请求URL
方法一:使用requests模块 import requests as rq import json def funcpost(): url = 'http://www.***.com/' # 需要请 ...