Func<T>,Action<T>,Predicate<T>使用小结

一、基本知识
1.这三个都是.Net内置的泛型委托,方便我们直接使用,而不需要在使用委托时还要做如下定义

public delegate string GetName(string bookId);

2.Func<T>是有返回值的泛型委托,格式为Func<T1,T2,T..N,TResult>,T1,T2,T..N为多个参数,TResult为返回值

3.Ation<T>是没有返回值的泛型委托,格式为Action<T1,T2,T..N>,T1,T2,T..N为多个参数

4.Predicate<T>是返回值为Bool的泛型委托,相当于Func<T,bool>,主要用于校验,检查等

二、使用理解
泛型委托的使用,和抽像类的抽象方法有异曲同工之妙,即将业务变化的实现部分抽离到外部,内部程序主体框架保持不变,做到方法注入,属性注入
配合匿名方法的使用,可进一步使外部的实现部分也变得非常简洁,在Linq的扩展方法有大量使用

例如:有一个判断单号合法的方法(除了判断,还要写LOG,计数等),因为每种单据不同,判断逻辑也是不一样的,演示方法注入

//方法定义
public static bool CheckOrderNo(Func<string, bool> fun, string orderNo)
{
    bool re = fun(orderNo);
    //TODO:Log
    //TODO:Count
    return re;
}

//使用匿名方法
//判断是否为AA单(长度为10,首字母为"AA"
var result= CheckOrderNo(x => x.Length == 10 && x.Substring(0, 2).ToUpper().Equals("AA"), "AB126552DFD15");

//判断是否为AD单(长度为16,6~10字母为"ADGH")
var result= CheckOrderNo(x => x.Length == 16 && x.Substring(5, 4).ToUpper().Equals("ADGH"), "AB126ADGH552DFD");

//使用普通做法
public bool CheckAAOrderNo(string orderNo)
{
    return orderNo.Length == 10 && orderNo.Substring(0, 2).ToUpper().Equals("AA")
}
var result= CheckOrderNo(CheckAAOrderNo, "AB126552DFD15");
时间: 2024-07-29 14:17:28

Func<T>,Action<T>,Predicate<T>使用小结的相关文章

通过IL分析C#中的委托、事件、Func、Action、Predicate之间的区别与联系

一直以来都是对于事件与委托比较混淆,而且不太会用.找了个时间,总结了一下,感觉清晰了很多. 先说一下个人理解的结论吧: delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类. delegate声明的变量与delegate声明的事件,并没有本质的区别,事件是在delegate声明变量的基础上包装而成的,类似于变量与属性的关系(在IL代码中可以看到每一个delegate声明的事件都对应是私有的delegate声明的变量),提升了安全性. Action 与Func:这两个其实

Func与Action

Func与Action C#委托的介绍(delegate.Action.Func.predicate) Func和Action委托的区别和简单使用

.Net——Func&lt;&gt;与Action&lt;&gt;

首先来先写几个测试函数: <span style="font-size:14px;"> public delegate void SayHello(string strName); public static void Hello(string strName) { Console.WriteLine(strName + " ,hello"); } public static void SayGoodNight(string strName) { Con

Func 和 Action 委托

有了泛型委托,就有了一能适用于任何返回类型和任意参数(类型和合理的个数)的通用委托,Func 和 Action.如下所示(下面的in表示参数,out表示返回结果): delegate TResult Func <out TResult> ();delegate TResult Func <in T, out TResult> (T arg);delegate TResult Func <in T1, in T2, out TResult> (T1 arg1, T2 ar

什么是LambdaExpression,如何转换成Func或Action(2)

序言 在上一篇中,我们认识了什么是表达式树.什么是委托,以及它们的关系.可能是我功力不好,貌似大家都不怎么关注,没有讲解出不同角度的问题. 学习一种新技术,是枯燥的过程,只有在你掌握后并能运用时才能从它身上得到乐趣. 做程序开发是一群很奇怪的人群,我们居然可以通过密密麻麻的英文字符加上标点符号从中找到乐趣,确实很奇怪. 考虑到大家接触新技术需要一个过程: 其实对于很多人来说已经不是新技术了,不过您会耐心看本篇后续的文章,说明您可能对这一项技术运用的并不是很熟练 所以我不打算一上来,就放一大堆代码

C#中Func与Action的理解

Action 与 Func是.NET类库中增加的内置委托,以便更加简洁方便的使用委托.最初使用委托时,均需要先定义委托类型,然后定义一个符合委托类型签名的函数,在调用前,需声明并创建委托对象,将指定函数与委托进行关联.如例1:public delegate int Math(int param1,int param2);定义委托类型Public int Add(int param1,int param2)//定义同签名函数{ Return param1+param2;}Math math;//声

[C#基础]Func和Action学习

目录 委托 Action Func 总结 委托 委托的那些事 关于委托的基本定义,在很久之前的这篇文章中,有个简单的介绍.稍微回顾一下. 委托是c#中类型安全的,可以订阅一个或多个具有相同签名方法的函数指针 声明委托的方式:delegate 返回值类型 委托类型名(参数) 例如: 1 delegate void Say(string strContent); 如果想使用该委托,需要一个对应的方法. 1 /// <summary> 2 /// 委托对应方法 3 /// </summary&

Func以及Action

Func是一种委托,这是在3.5里面新增的,2.0里面我们使用委托是用Delegate,Func位于System.Core命名空间下,使用委托可以提升效率,例如在反射中使用就可以弥补反射所损失的性能. Action<T>和Func<T,TResult>的功能是一样的,只是Action<T>没有返类型, Func<T,T,Result>:有参数,有返回类型Action,则既没有返回也没有参数, Func<T,TResult> 的表现形式分为以下几种

委托代码func和Action的基本用法

这是微软简化后的委托写法,其中,func适合带返回参数的方法调用,action适合没有返回参数的方法调用 FUNC方法代码: public string GetPeopleInfo(string name, int age) { return $"姓名:{name},年龄:{age}"; } FUNC调用代码:,func的最后一个参数是返回类型,如果是无参的方法调用,那么尖括号只写返回值的类型即可 Func<string, int, string> fuc = new Fu