zoukankan      html  css  js  c++  java
  • 委托和Lambda那点事(一步步集合案例分析,为什么使用委托 3解)

    案例1:<原始的方法>

    static void Main(string[] args)
    {
    //委托的比较
    //常规方式
    int[] numbers = { 1,2,3,4,5,6,7,8,9,10};
    List<int> evenNumber = new List<int>();//偶数
    List<int> oddNumber = new List<int>();//奇数
    List<int> over5Number = new List<int>();//大于5的
    //判断
    foreach (int i in numbers)
    {
    if (IsEven(i))
    {
    evenNumber.Add(i);
    }
    if (IsOdd(i))
    {
    oddNumber.Add(i);
    }
    if (IsOver5(i))
    {
    over5Number.Add(i);
    }
    }
    //输出显示
    Display(evenNumber,oddNumber,over5Number);


    //如何做到 判断+输出显示在一起呢?思路:就是要把Bool方法作为一个参数带入方法内

    }

    //写成方法有助于处理多个对象,不用每个对象都写一次函数,直接调用即可
    static bool IsEven(int number)
    {
    return (number % 2 == 0);
    }

    static bool IsOdd(int number)
    {
    return (number % 2 == 1);
    }

    static bool IsOver5(int number)
    {
    return (number > 5);
    }

    static void Display(List<int> list1,List<int> list2,List<int> list3)//输出方法
    {
    Console.WriteLine("The list1 is :");
    foreach(int i in list1)
    {
    Console.Write(i+"");
    }
    Console.WriteLine();
    Console.WriteLine("The list2 is :");
    foreach(int i in list2)
    {
    Console.Write(i+"");
    }
    Console.WriteLine();
    Console.WriteLine("The list3 is :");
    foreach(int i in list3)
    {
    Console.Write(i+"");
    }

    }
    }



    委托方法:
     

    class Program
    {
    delegate bool NumerPredicate(int number);//类似于判断方法
    static void Main(string[] args)
    {
    //委托的比较
    //常规方式
    int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    List<int> evenNumber = Display_Predicate(numbers,IsEven);//偶数,用变量引用IsEven方法
    List<int> oddNumber = Display_Predicate(numbers,IsOdd);//奇数
    List<int> over5Number = Display_Predicate(numbers,IsOver5);//大于5的



    //如何做到 判断+输出显示在一起呢?思路:就是要把Bool方法作为一个参数带入方法内

    }

    //写成方法有助于处理多个对象,不用每个对象都写一次函数,直接调用即可
    static bool IsEven(int number)
    {
    return (number % 2 == 0);
    }

    static bool IsOdd(int number)
    {
    return (number % 2 == 1);
    }

    static bool IsOver5(int number)
    {
    return (number > 5);
    }
    static List<int> Display_Predicate(int[] array, NumerPredicate predicate)
    {
    List<int> result = new List<int>();
    foreach (int i in array)
    {
    if (predicate(i))//用predicate变量引用方法
    {
    result.Add(i);
    }
    }

    foreach (int i in result)
    {
    Console.Write(i + "");
    }
    Console.WriteLine();
    return result;
    }
    }




    另一解:<Lambda表达式>

    class Program
    {
    delegate bool NumerPredicate(int number);//类似于判断方法
    static void Main(string[] args)
    {
    //NumerPredicate evenPredicate = IsEven;
    //Console.WriteLine(evenPredicate(4));//true
    NumerPredicate evenPredicate=number => (number % 2==0);//偶数
    NumerPredicate oddPredicate = number => (number % 2 == 1);//判断是否是奇数,用委托的变量引用Lambda表达式这个方法
    NumerPredicate over5Predicate = number => (number > 5);
    Console.WriteLine(oddPredicate(5));//true
    int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    List<int> evenNumber = Display_Predicate(numbers, evenPredicate);//偶数,用变量引用IsEven方法
    List<int> oddNumber = Display_Predicate(numbers, oddPredicate);//奇数
    List<int> over5Number = Display_Predicate(numbers, over5Predicate);//大于5的




    }

    //写成方法有助于处理多个对象,不用每个对象都写一次函数,直接调用即可

    static List<int> Display_Predicate(int[] array, NumerPredicate predicate)
    {
    List<int> result = new List<int>();
    foreach (int i in array)
    {
    if (predicate(i))//用predicate变量引用方法
    {
    result.Add(i);
    }
    }

    foreach (int i in result)
    {
    Console.Write(i + "");
    }
    Console.WriteLine();
    return result;
    }
    }



  • 相关阅读:
    Linux内核分析第七周学习笔记——Linux内核如何装载和启动一个可执行程序
    <深入理解计算机系统>第七章读书笔记
    Linux内核分析第六周学习笔记——分析Linux内核创建一个新进程的过程
    linux内核分析第3章&第18章读书笔记
    Linux内核分析第五周学习总结——分析system_call中断处理过程
    课本第五章读书笔记
    Linux内核分析第四周学习总结——系统调用的工作机制
    课本第一二章读书笔记
    20162328蔡文琛 实验二 树
    20162328蔡文琛 大二week07
  • 原文地址:https://www.cnblogs.com/IAmBetter/p/2294676.html
Copyright © 2011-2022 走看看