zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    C语言I博客作业11
    第十四周助教总结
    C语言I博客作业10
    Tensorflow--MNIST简单全连接层分类
    记一些好看的Android开源菜单
    AS更新到3.5.2遇到ERROR: SSL peer shut down incorrectly问题
    Tensorflow tf.app.flags 的使用
    Android Sensor(传感器)
    《第一行代码》百分比布局出现的问题
    当Turtle遇见柯南?
  • 原文地址:https://www.cnblogs.com/soundcode/p/4078528.html
Copyright © 2011-2022 走看看