程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#Lambda表達式學習日記,

C#Lambda表達式學習日記,

編輯:C#入門知識

C#Lambda表達式學習日記,


Lambda表達式只是用更簡單的方式來寫匿名方法,徹底簡化了對.NET委托類型的使用。

現在,如果我們要使用泛型 List<> 的 FindAll() 方法,當你從一個集合去提取子集時,可以使用該方法。

// 該方法唯一的參數是一個System.Predicate<T>類型的泛型委托
public List<T> FindAll(Predicate<T> match);

// 該委托指向任意以類型參數作為唯一輸入參數並返回bool的方法
public delegate bool Predicate<in T>(T obj);

 在調用 FindAll() 時,List<T>中每一項都將傳入Predicate<T> 對象所指向的方法。方法在實現時將執行一些計算,來判斷傳入的數據是否符合標准,並返回 true / false,如果返回 true ,該項被添加到表示自己的List<T>集合中。

現在,我們需要從一個List<int>集合中找到所有偶數,該如何實現呢?

 

1.傳統方法

public class MyDelegateSyntax
{public static void Show()
    {
        Console.WriteLine("fun with lambdas");

        List<int> list = new List<int> { 20, 1, 4, 8, 9, 77 };

        Predicate<int> callback = new Predicate<int>(IsEvenNumber);

        // 傳統方法
        List<int> evenList = list.FindAll(callback);

        Console.WriteLine();

        foreach (int item in evenList)
        {
            Console.WriteLine(item);
        }
    }

    private static bool IsEvenNumber(int obj) => obj % 2 == 0;
}

 

2.匿名方法

public class MyDelegateSyntax
{
  public static void Show() { Console.WriteLine("fun with lambdas"); List<int> list = new List<int> { 20, 1, 4, 8, 9, 77 }; // 匿名方法 List<int> evenList = list.FindAll(delegate (int i) { return i % 2 == 0; }); Console.WriteLine(); foreach (int item in evenList) { Console.WriteLine(item); } } }

 

3.Lambda表達式

public class MyDelegateSyntax
{
    public static void Show()
    {
        Console.WriteLine("fun with lambdas");

        List<int> list = new List<int> { 20, 1, 4, 8, 9, 77 };

        // Lambda表達式
        // 隱式,編輯器會更具上下文表達式推斷i的類型
        List<int> evenList = list.FindAll(i => i % 2 == 0);

        // 顯式
        // 描述:我的參數列表(一個整形i)將會被表達式(i%2)==0處理
        List<int> evenList1 = list.FindAll((int i) => i % 2 == 0);

        // 我的參數列表(一個整形i)將會被表達式(i%2)==0處理

        Console.WriteLine();

        foreach (int item in evenList)
        {
            Console.WriteLine(item);
        }
    }
}

 

 4.使用多個語句處理參數(“{}”)

public class MyDelegateSyntax
{
    public static void Show()
    {
        Console.WriteLine("fun with lambdas");

        List<int> list = new List<int> { 20, 1, 4, 8, 9, 77 };

        // 多個處理語句 語句塊 {}
        List<int> evenList = list.FindAll(i =>
       {
            Console.WriteLine(i);
            return i % 2 == 0;
        });

        Console.WriteLine();

        foreach (int item in evenList)
        {
            Console.WriteLine(item);
        }
    }
}

 

5.含有多個(或零個)參數的Lambda表達式

public class MyDelegateSyntax
{
    public delegate string VerySimpleDelegate();

    public delegate void MathMessage(string msg, int result);

    public static void Show()
    {
        Console.WriteLine("fun with lambdas");
        // 多個參數的Lambda
        MathMessage mm = new MathMessage((msg, result) => Console.WriteLine($"msg:{msg} result:{result}"));
        mm("adding has cmpleted", 1 + 5);

        // 0個參數Lambda
        VerySimpleDelegate d = new VerySimpleDelegate(() => "enjoy you string");
        Console.WriteLine(d.Invoke());
    }
}

 

學無止境,望各位看官多多指教。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved