zoukankan      html  css  js  c++  java
  • Func<T,TResult>的使用方法(转载)

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

    这是一个委托方法,这个方法有一个参数T(T arg),比如int arg,string arg等等;一个返回值TResult; 要想让输入的参数arg返回TResult,则必须将一个带有T arg参数的方法用委托的方式赋值给Func方法;比如如下的方法就符合Func<string,int>这个委托的定义:

    private int GetAge(string age)
    {
        return Int32.Parse(age);
    }
    

     下面用一个比较详细的实例来说明这个方法的用法,其中会用到Lambda表达式(只是匿名函数的一种表达方式而已,不必大惊小怪):

    定义委托:

    //这是一个计算年龄的方法
    //输入一个字符串数组,其中的字符串分别经过指定的conveter委托方法的运算以后
    //字符串值就变成了整数数组
    public int[] GetGoodAge(string[] rawAges, FUNC<string, int> conveter)
    {
        List<string> result = new List<string>();
        foreach(string age in rawAges)
        {
            result.Add(conveter(age));
        }
        return result.ToArray();
    }

    在主函数可以这样来写:

    Main()
    {
         string[] ages = new string[] {"123lk","345op","909ka","234ja"};
    //输入一组字符串数组
         int[] result =  GetGoodAge(ages, age=> Int32.Parse(age.Substring(0,2)));
    //调用委托方法int[] GetGoodAge(string[],Func<string,int> conventer)
    //这里conventer就是一个匿名函数,用的是Lambda表达式
    //表示输入参数age,然后返回Int32.Parse(age.Substring(0,2))的值
    //这个返回值输入到result数组中
         foreach(int age in result)
         {
            Console.WriteLine(age);
         }
    }

    其实这个委托方法的主要特点就是节省代码,如果有多个处理输入和输出的方法,直接将函数作为参数传进去就可以了,省去了反复调用的麻烦。

  • 相关阅读:
    [工作中的设计模式]中介模式模式Mediator
    [工作中的设计模式]责任链模式chain
    [工作中的设计模式]迭代子模式Iterator
    [工作中的设计模式]组合模式compnent
    TI IPNC Web网页之流程分析
    TI IPNC Web网页之GoDB开发环境
    安装ubuntu时将boot目录单独挂载的意义
    ubuntu添加自定义vga输出分辨率
    GCC编译默认的头文件搜索路径
    设置搜狗输入法在任何时候按左右两侧的shift激活
  • 原文地址:https://www.cnblogs.com/qouoww/p/3163319.html
Copyright © 2011-2022 走看看