描述:

封装一个具有一个参数并返回TResult参数指定的类型值的方法.

语法:

public delegate TResult Func<T,TResult>(T arg);

参数类型:

T:此委托封装的方法的参数类型.

TResult:此委托封装的方法的返回值类型.

参数:

arg:委托封装的方法的参数

返回值:此委托封装的方法的返回值

备注:

可以使用此委托构造一个能以参数形式传递的方法,而不用显式声明自定义的委托.该方法必须与此委托的方法签名想对应.

也就是说,封装的方法必须具有一个通过值传递给它的参数,并且具有返回值.

注意:

若要引用一个具有一个参数并返回void的方法,则需要使用泛型Action<T>委托.

上面接受的只是有一个参数,并有返回值的情况,其实Func委托共有以下形式:

public delegate TResult Func<TResult>();
public delegate TResult Func<T,TResult>(T arg);
public delegate TResult Func<T1,T2,TResult>(T1 arg1,T2 arg2);
public delegate TResult Func<T1,T2,T3,TResult>(T1 arg1,T2 arg2,T3 arg3);
public delegate TResult Func<T1,T2,T3,T4,TResult>(T1 arg1,T2 arg2,T3 arg3,T4 arg4);

即:当我们使用有一个、两个、三个、四个参数并有一个返回值时,可以不用自己定义委托,可以使用已定义好的委托。

例子:

protected void Page_Load(object sender, EventArgs e)
{List<int> list = new List<int>();list.AddRange(new int[] { 7, 6, 10, 1, 2, 3, 4, 5, 8 });Func<int, bool> fi = new Func<int, bool>(MoreThan5);IEnumerator<int> ie =list.Where<int>(fi).GetEnumerator();//效果与list.Where<int>(fi).GetEnumerator()一致//IEnumerator<int> ie = list.Where<int>(x => x > 5).GetEnumerator();//效果与list.Where<int>(fi).GetEnumerator()一致//IEnumerator<int> ie = list.Where(delegate(int i){return i > 5;}).GetEnumerator();while(ie.MoveNext()){Response.Write(ie.Current.ToString()+"<br/>");            }
}public static bool MoreThan5(int i)
{return i > 5;
}

页面输出:

7

6

10

8

FuncT,TResult泛型委托相关推荐

  1. Func〈T, TResult〉 泛型委托 以及演变历程

    以下内容为菩提树下的杨过根据微软MSDN整理,转贴请注明出处   MSDN对于Func<T, TResult>)的官方解释: 封装一个具有一个参数并返回 TResult 参数指定的类型值的 ...

  2. C# 委托 (一)—— 委托、 泛型委托与Lambda表达式

    C# 委托 (一)-- 委托. 泛型委托与Lambda表达式 2018年08月19日 20:46:47 wnvalentin 阅读数 2992 版权声明:此文乃博主之原创.鄙人才疏,望大侠斧正.此文可 ...

  3. 泛型委托在项目中的应用

    Action<T> 泛型委托:封装一个方法,该方法只采用一个参数并且不返回值.可以使用此委托以参数形式传递方法,而不用显式声明自定义的委托.该方法必须与此委托定义的方法签名相对应.也就是说 ...

  4. 使用.NET中的Action及Func泛型委托

    原文 http://www.cnblogs.com/skm-blog/archive/2013/05/24/3096294.html 委托,在C#编程中占有极其重要的地位,委托可以将函数封装到委托对象 ...

  5. 泛型委托 Predicate/Func/Action

    Predicate 泛型委托   表示定义一组条件并确定指定对象是否符合这些条件的方法.此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素. 看看下面它的定义: // Summ ...

  6. ExpressionFuncT,TResult和FuncT,TResult

    1.Expression<Func<T,TResult>>是表达式 //使用LambdaExpression构建表达式树Expression<Func<int, i ...

  7. C#——Lambda表达式与泛型委托DEMO

    问题描述 按要求编写Lambda表达式: .NET已定义的Func<out TResult>是一个泛型委托,它封装一个方法,该方法不具有参数,且返回由 TResult 参数指定的类型的值. ...

  8. 第十节:委托和事件(2)(泛型委托、Func和Action、事件及与委托的比较)

    一. 泛型委托 所谓的泛型委托,即自定义委托的参数可以用泛型约束,同时内置委托Func和Action本身就是泛型委托. 将上一个章节中的Calculator类中的方法用自定义泛型委托重新实现一下. 1 ...

  9. C#泛型委托Predicate、Action、Func

    Predicate Predicate泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法.此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素. 通过查看源码发现 P ...

最新文章

  1. 这引人联想的机械右手!玩转魔方,灵活不输人类,OpenAI:前所未有
  2. 使用Idea创建SpringCloud父子工程
  3. Objective-C 和 Swift 混编项目的小 Tips(一)
  4. 冒泡排序、选择排序和插入
  5. 一文足以了解什么是 Java 中的锁
  6. vue 配置跨域访问
  7. 【微信小程序】数据绑定
  8. Go的全新漏洞检测工具govulncheck来了
  9. 【转载】C++ 内存分配(new,operator new)详解
  10. 排队系统利用分布式设计的思考
  11. 环境微生物复习题及答案
  12. uni-app微信小程序配置(三)
  13. 数学规划模型(一):数学规划模型的基本知识
  14. 国产磁力架的用途,特点和使用方法
  15. Java锁Synchronized对象锁和类锁区别(搬运)
  16. 在文件选择打开方式里,无法添加.exe程序怎么解决
  17. 事件抽取与事理图谱(一)
  18. python中beautifulsoup是什么,Python Beautiful Soup简介
  19. 手把手带你实现西瓜视频的责任链埋点框架
  20. 如何用波士顿矩阵分析需求

热门文章

  1. c++ extern “C”
  2. C++ delete与 delete []区别
  3. 如何在私服上传jar包
  4. Scala方法定义,方法和函数的区别,将方法转换成函数
  5. JTable设置列宽、自动调整
  6. SQL Server 2014 Win7 Win10 安装详解 SQL Server 2017 2019 Linux及SQL TSQL ETL实用案例
  7. SSD 安装、训练、测试(ubuntu14.04+cuda7.5+openvc2.4.9)
  8. 移动端适配--flexible.js
  9. OpenSSL 之 RSA 相关命令学习笔记
  10. php变量的引用与计数规则