为了演示委托,我们先来定义一个方法:
public static bool IsTen(int i)
{
    return i == 10 ? true : false;
}

如果要用自定义委托,则需要声明:
delegate bool  IsTenDelegate(int i);

示例一:
//这是最基本的写法
IsTenDelegate d = new IsTenDelegate(IsTen);
Console.WriteLine(d(10)); //true

示例二:
//自定义匿名委托
IsTenDelegate d = delegate(int i) { return i == 10 ? true : false; };
Console.WriteLine(d(10)); //true

示例三:
//或者使用系统现有的委托Func<>,结合lambda表达式
Func<int, bool> d = p => p == 10 ? true : false;
Console.WriteLine(d(10)); //true

示例四:
//或者也可以这么写
Func<int, bool> d = delegate(int i) { return i == 10 ? true : false; };
Console.WriteLine(d(10)); //true

-------------- 高端大气上档次的分割线 --------------------

下面我们来看一个Func<>委托的实际应用场景:
//假设有一个Model
public class TModel
{
    public int ID { get; set; }
    public string Name { get; set; }
    public List<string> Friends { get; set; }
}

//提供一个处理单个Model数据的方法模板,返回方法集合
public static List<Func<TModel, object, object>> DataConver()
{
    List<Func<TModel, object, object>> list = new List<Func<TModel, object, object>>();
    list.Add((t, p) => t.ID = (int)p);
    list.Add((t, p) => t.Name = p.ToString());
    return list;
}

//利用方法集合处理数据,并返回结果数据
//此方法为一个泛型方法,接受类型参数T
public static List<T> GetData<T>(List<Func<T, object, object>> dataMaker) where T:class,new()
{
    List<T> lst = new List<T>();
    T t = new T();
    for (int i = 0; i < dataMaker.Count; i++)
    {
        //因为dataMaker是方法集合,而每个方法都负责处理T中的一个成员,
        //这里假设所有方法的第二个参数都是123,
        //具体应用场景应该是根据T对应的成员类型做不同的转换。
        dataMaker[i](t, 123);
    }
    lst.Add(t);
    return lst;
}

//调用
List<TModel> list = GetData<TModel>(DataConver());

再谈.NET委托(delegate、Func<>)的更多相关文章

  1. 再谈C#委托与事件

    之前写过一篇关于C#委托与事件的文章(见<C#委托和事件例析>),不过还是收到一些网友的提问.所以,今天再换另一个角度来详解一下这个问题. 一.在控制台下使用委托和事件 我们都知道,C#中 ...

  2. C#常见委托のdelegate定义,Func,Action,Predicate总结

    委托,顾名思义,就是让其他代理,本质就是为具有共性方法组定义一个方法模板:(交流可以加qq群:435226676) 委托常见的方式有一般委托显示定义,Func<T,TResult> (T, ...

  3. C#中匿名函数、委托delegate和Action、Func、Expression、还有Lambda的关系和区别

    以前一直迷迷糊糊的,现在总算搞明白. Lambda表达式 Lamda表达式基本写法是()=>{ };Lambda和方法一样都可以传入参数和拥有返回值.(int x)=>{return x; ...

  4. 委托delegate 泛型委托action<> 返回值泛型委托Func<> 匿名方法 lambda表达式 的理解

    1.使用简单委托 namespace 简单委托 { class Program { //委托方法签名 delegate void MyBookDel(int a); //定义委托 static MyB ...

  5. C# 委托应用总结(委托,Delegate,Action,Func,predicate)

    C# 委托应用总结 一.什么是委托 1.1官方解释 委托是一种定义方法签名的类型.当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联.您可以通过委托实例调用方法. 1.2个人理解 委托就是执 ...

  6. C#基础知识六之委托(delegate、Action、Func、predicate)

    1. 什么是委托 官方解释 委托是定义方法签名的类型,当实例化委托时,您可以将其实例化与任何具有兼容签名的方法想关联,可以通过委托实例调用方法. 个人理解 委托通俗一点说就是把一件事情交给别人来帮助完 ...

  7. 为什么不能把委托(delegate)放在一个接口(interface)当中?

    stackoverflow上有人问,为什么不能把委托放在一个接口当中? 投票最多的第一个答案第一句话说,“A Delegate is just another type, so you don't g ...

  8. 委托(Func与Action)

    1.平时我们如果要用到委托一般都是先声明一个委托类型,比如: private delegate string Say(); string说明适用于这个委托的方法的返回类型是string类型,委托名Sa ...

  9. C# 委托(delegate)、泛型委托和Lambda表达式

    目录 # 什么是委托 # 委托声明.实例化和调用 1.声明 2.委托的实例化 3.委托实例的调用 4.委托完整的简单示例 #泛型委托 1.Func委托 2.Action委托 3.Predicate委托 ...

随机推荐

  1. 中间件 | mq消息队列解说

    消息队列 1.1 什么是消息队列 我们可以把消息队列比作是一个存放消息的容器,当我们需要使用消息的时候可以取出消息供自己使用.消息队列是分布式系统中重要的组件,使用消息队列主要是为了通过异步处理提高系 ...

  2. openjudge计算概论-大整数加法

    /*=====================================================================1004:大整数加法总时间限制: 1000ms 内存限制: ...

  3. Android插件化(三):OpenAtlas的插件重建以及使用时安装

    Android插件化(三):OpenAtlas的插件重建以及使用时安装 转 https://www.300168.com/yidong/show-2778.html    核心提示:在上一篇博客 An ...

  4. Ubuntu16.04 + cuda9.0 +cudnn7.1(转载)

    转载一个详细可用的ubuntu16.04+cuda9.0+cudnn7.1教程. 0 - 参考材料 https://blog.csdn.net/Umi_you/article/details/8026 ...

  5. 一个link加载多个css文件

    细看正则时匹配慕课网链接时发现的,一个link加载多个css文件 http://static.mukewang.com/static/css/??base.css,common/common-less ...

  6. Oracle中查询当前时间、时间格式化方法

    Oracle中如何获取系统当前时间 select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;  ORACLE里获取一个时间的年.季.月.周. ...

  7. Delphi下Treeview控件基于节点编号的访问1

    有时我们需要保存和重建treeview控件,本文提供一种方法,通过以树结构节点的编号访问树结构,该控件主要提供的方法如下:      function GetGlobeNumCode(inNode:T ...

  8. MySQL设置可以远程连接

    在MySQL命令行执行如下: use mysql; grant all privileges on *.* to root@'%' identified by "password" ...

  9. topK问题

    概述 在N个乱序数字中查找第K大的数字,时间复杂度可以减小至O(N). 可能存在的限制条件: 要求时间和空间消耗最小.海量数据.待排序的数据可能是浮点型等. 方法 方法一 对所有元素进行排序,之后取出 ...

  10. 三节课MINI计划第五周

    一.任务及干货 二.作品 (一)小组分工 (二)社群运营方案