C#Lambda運算式學習日記

來源:互聯網
上載者:User

標籤:

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());    }}

 

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

C#Lambda運算式學習日記

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.