Func<T,TResult>泛型委托

简介:

描述:

封装一个具有一个参数并返回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

分类:  ASP.NET
本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/p/4078528.html ,如需转载请自行联系原作者
相关文章
|
7天前
|
Java 编译器 Linux
【C++11(二)】lambda表达式以及function包装器
【C++11(二)】lambda表达式以及function包装器
|
4月前
|
C++
C++类中的const使用
C++类中的const使用
|
存储 索引 Python
Python函数是所谓的第一类对象(First-Class Object)是什么鬼?
之前写过一篇关于装饰器的文章,虽然写得还算不错,但是也有不少同学表示没看懂,我大概分析了其中的原因,主要问题是他们不理解函数,因为Python中的函数不同于其它语言。
115 0
C#委托/Func()中 GetlnvocationList()方法的使用 | 接受委托多个返回值
C#委托/Func()中 GetlnvocationList()方法的使用 | 接受委托多个返回值
252 0
C#委托/Func()中 GetlnvocationList()方法的使用 | 接受委托多个返回值
函数柯里化与class类
是把接收多个参数的函数变换成接收一个单一参数(最初函数的第一个参数)的函数,并返回接受剩余的参数而且返回结果的新函数的技术。
【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )
【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )
183 0
【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )
|
Java 编译器
重载(overload) 和重写(override) 的区别?重载的方法能否根据返回类型进行区分?
重载(overload) 和重写(override) 的区别?重载的方法能否根据返回类型进行区分?
1189 0
|
JSON 前端开发 测试技术
WebApi 接口返回值不困惑:返回值类型详解。IHttpActionResult、void、HttpResponseMessage、自定义类型
首先声明,我还没有这么强大的功底,只是感觉博主写的很好,就做了一个复制,请别因为这个鄙视我,博主网址:http://www.cnblogs.com/landeanfen/p/5501487.html 使用过Webapi的园友应该都知道,Webapi的接口返回值主要有四种类型 void无返回值 IHttpActionResult     (需要MVC高版本才会支持,VS2012/2013不支持,请升级DLL文件或者到VS2015开发环境) HttpResponseMessage 自定义类型 此篇就围绕这四块分别来看看它们的使用。
1926 0