为了演示委托,我们先来定义一个方法:
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. python 简化数据结构的初始化二 支持关键字参数

    1.例子 学自cookbook3

  2. 关于tomcat-users.xml添加用户被重复加载的问题mark

    今天用Eclipse启动tomcat带不起来项目,想进tomcat管理页面看我的工程是否已经发布,但是管理页面没有配置tomcat用户,于是进行tomcat-user.xml的用户添加. 本来想当然地 ...

  3. 【转载】 一文看懂深度学习新王者「AutoML」:是什么、怎么用、未来如何发展?

    原文地址: http://www.sohu.com/a/249973402_610300 原作:George Seif 夏乙 安妮 编译整理 ============================= ...

  4. 用户Ip地址和百度地图api接口获取用户地理位置(经纬度坐标,城市)

    <?php   //获取用户ip(外网ip 服务器上可以获取用户外网Ip 本机ip地址只能获取127.0.0.1) function getip(){     if(!empty($_SERVE ...

  5. 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_04-Eureka注册中心-将服务注册到Eureka Server

    cms相当于客户端 配置客户端的信息 后面加逗号分隔开 50102表示向两台eureka服务上报服务,如果有一台死掉了 那么还可以上另外的一台去注册服务 直接把ip注册到eureka 启动类加注解 重 ...

  6. 第三方框架----FMDB的使用

    以下是SQLite API进行封装的库FMDB的简单使用 : FMDB框架的下载地址 :https://github.com/ccgus/fmdb 代码如下 : ////  ViewControlle ...

  7. UIImagePickerController的用法

    在实际的APP开发中,我们经常会见到应用的这样的功能 :需要选取手机相册的照片,还有选取视频,拍视频和照相的操作. 在iOS开发中,实现以上的功能就需要用到 UIImagePickerControll ...

  8. winform_textbox控件只能输入数字

    //实现只限制输入数字事件 private void txtShowNum_KeyPress(object sender, KeyPressEventArgs e) { e.Handled = tru ...

  9. SVN安装使用【转】

    SVN使用教程总结   SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Sub ...

  10. .rpt 文件怎麽打開?Crystal Reports 打開.rpt失敗 ?

    .rpt   是SAP Crystal Reports 製作出來的檔案的後綴名, 可以通過 SAP Crystal Reports Viewer 打開,也可以直接用記事本(notepad / Note ...