为了演示委托,我们先来定义一个方法:
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. SpringBoot表单数据校验

    Springboot中使用了Hibernate-validate作为默认表单数据校验框架 在实体类上的具体字段添加注解 public class User { @NotBlank private St ...

  2. 在 Java 应用程序中加一些 Groovy 进来

    如果您一直在阅读这个系列,那么您应该已经看到有各种各样使用 Groovy 的有趣方式,Groovy 的主要优势之一就是它的生产力.Groovy 代码通常要比 Java 代码更容易编写,而且编写起来也更 ...

  3. SVG-变换

    transform变换 translate平移 <svg width="200" height="50"> <rect x="0&q ...

  4. It’s worth noting值得注意的是

    It’s worth noting that in JavaScript applications the Model is often connected via Ajax to a back-en ...

  5. windows下打开binlog

    上篇我们介绍了binlog(参见mysql的binlog),配置文件用的是linux下的my.cnf,那么在windows下如何打开binlog呢?道理是相同的,配置文件是不一样的.在windows下 ...

  6. JSONP实现Ajax跨域请求

    前言 由于浏览器存在同源策略的机制,所谓同源策略就是阻止从一个源(域名,包括同一个根域名下的不同二级域名)加载的文档或者脚本获取/或者设置另一个源加载的文档属性. 但比较特别的是:由于同源策略是浏览器 ...

  7. 万能锁对象 EZ_BDCP2

    万能锁对象 EZ_BDCP2 *&---------------------------------------------------------------------* *& F ...

  8. Vue-cli安装,创建Vue项目

    1.安装脚手架: npm install -g vue-cli 2.查看vue: vue 3.查看可以使用的模板: vue list 4.创建项目sell: vue init webpack sell ...

  9. ubuntu18.04安装chromium浏览器

    sudo add-apt-repository ppa:a-v-shkop/chromium sudo apt-get upate sudo apt-get install chromium-brow ...

  10. 【Leetcode_easy】669. Trim a Binary Search Tree

    problem 669. Trim a Binary Search Tree 参考 1. Leetcode_easy_669. Trim a Binary Search Tree; 完