• Lambda表达式


    1.使用命名的方法:

    场景:通用代码开发者想要创建一个通用的方法来筛选整型数组,但是这个通用方法要能够制定用来筛选该数组的的算法。

             首先,开发者必须声明一个委托delegate,该委托的设计原型就是收到一个int(整型)类型,如果在被筛选的数组中确实包含一个int类型,则这个委托将返回true。

    创建一个工具类并添加了delegate和筛选方法,这个公共代码如下:

     public class Common
        {
            public delegate bool IntFilter(int i);
            public static int[] FilterArrayOfInts(int[] ints, IntFilter filter)
            {
                System.Collections.ArrayList aList = new System.Collections.ArrayList();
                foreach (int i in ints)
                {
                    if (filter(i))
                    {
                        aList.Add(i);
                    }
                }
                return ((int[])aList.ToArray(typeof(int)));
            }
        }

    以上FilterArrayOfInts 方法允许应用程序开发者将一个整型数组和一个delegate作为参数传递到筛选方法中,并将获得一个筛选后的数组。
        现在,假定应用程序开发者只想筛选奇数,该方法在开发者的应用程序代码中进行了声明:

      //应用程序开发者的筛选方法
            public class APPlication
            {
                public static bool IsOdd(int i)
                {
                    returen(i & 1 == 1);
                }
            }

    根据 FilterArrayOfInts 方法中的代码,传入数组中的每个 int 整形都会调用这个方法。如果传送的 int 整形数是奇数,则此筛选方法将只返回true。下面是使用示例:

    int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    
    int[] oddNums = Common.FilterArrayOfInts(nums, Application.IsOdd);
    foreach (int i in oddNums)
    {
        Console.WriteLine(i);
    }

    示例的运行结果如下:

    image

    请注意,要想将 delegate 传递为 FilterArrayOfInts 方法的第二个参数,应用程序开发者只需要传递该方法的名称。只需要简单的创建另一个筛选器,应用程序开发者可以筛选不同的数据。应用程序开发者还可以为偶数、素数,以及任何想要的规则创建筛选器。方法委托(delegate)可以通过这种方式成为具有很高可重用的代码。

    2.使用匿名的方法

    int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    
    int[] oddNums = Common.FilterArrayOfInts(nums, delegate(int i) { return ((i & 1) == 1); });
    foreach (int i in oddNums)
    {
        Console.WriteLine(i);
    }
    Console.Read();
    3.使用lambda表达式
    x => x.Length > 0

    这个lambda表达式可以读做“x到x.Length>0”,或则读做“输入x返回x.Length > 0”。由于这个表达式的右边部分等于一个bool型值,则 delegate 应该指定该方法将返回一个bool型值,否则将会编译错误。

    如果使用 lambda 表达式,则上面的实例可以写成这样:

    int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int[] oddNums = Common.FilterArrayOfInts(nums, i => ((i & 1) == 1));
               
    foreach (int i in oddNums)
    {
        Console.WriteLine(i);
    }
    总结如下:
    int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    //1.使用命名方法
    int[] oddNums = Common.FilterArrayOfInts(nums, Application.IsOdd);
    
    //2.使用匿名方法
    int[] oddNums = Common.FilterArrayOfInts(nums
        , delegate(int i) { return ((i & 1) == 1); });
    
    //3.使用lambda表达式
    int[] oddNums = Common.FilterArrayOfInts(nums, i => ((i & 1) == 1));



  • 相关阅读:
    Sql获取数据集中各类型中的最大值(最新值)
    oracle重装系统后恢复
    icePDF去水印方法
    js的倒计时在ie下显示NAN的最佳解决办法
    类属性与类方法
    多继承、多态
    继承、方法重写与调用
    私有方法
    对象的属性隐藏
    __init__、__str__、__del__方法
  • 原文地址:https://www.cnblogs.com/xushaoxin/p/3261132.html
Copyright © 2020-2023  润新知