匿名方法是怎樣演變到Lambda表達試過程

来源:https://www.cnblogs.com/lxshwyan/archive/2019/05/05/10815138.html
-Advertisement-
Play Games

一、 "Lambda 表達式"(lambda expression)是一個匿名函數,Lambda表達式基於數學中的λ演算得名,直接對應於其中的lambda抽象(lambda abstraction),是一個匿名函數,即沒有函數名的函數。Lambda表達式可以表示閉包(註意和數學傳統意義上的不同)。 ...


     一、  "Lambda 表達式"(lambda expression)是一個匿名函數,Lambda表達式基於數學中的λ演算得名,直接對應於其中的lambda抽象(lambda abstraction),是一個匿名函數,即沒有函數名的函數。Lambda表達式可以表示閉包(註意和數學傳統意義上的不同)。     

     二、下麵代碼演示怎麼從一個匿名函數(方法) 推導出一個Lambda表達式:

            1.首先通過一個匿名方法來創建委托實例,傳入一個方法作為變數:

  public void Test()
        {
            Func<string, string> funcToUpper;   //定義一個委托實例,輸入參數、返回值都是string類型
            funcToUpper = Upper; //傳入一個方法變數
            Console.WriteLine(funcToUpper("lxsh"));    
        }
        public string Upper(string str)
        {
            return  str.ToUpper(); 
        }
View Code

           2.Upper可以轉化一個匿名方法,針對方法體只有一行或者幾行的,為了方便代碼可閱讀性,不建議單獨維護一個方法,只需做一個匿名方法既可以

 public void Test()
        {
            Func<string, string> funcToUpper;   //定義一個委托實例,輸入參數、返回值都是string類型
            //funcToUpper = Upper; //傳入一個方法變數
            funcToUpper = delegate (string str){return str.ToUpper();};
            Console.WriteLine(funcToUpper("lxsh"));    
        }
View Code

        3.在C#3.0語法中出現了"=>"(goes to)語法糖,他可以替換匿名方法;該語法就是Lambda 表達式,

  public void Test()
        {
            Func<string, string> funcToUpper;   //定義一個委托實例,輸入參數、返回值都是string類型
            //funcToUpper = Upper; //傳入一個方法變數
            // funcToUpper = delegate (string str){return str.ToUpper();};  //匿名方法
            funcToUpper =  (string str)=>{return str.ToUpper();};
            Console.WriteLine(funcToUpper("lxsh"));    
        }
View Code

       4.到第三步為止Lambda 表達式其實看起來和匿名方法一樣,然並沒有節省多大空間,或並沒有增加代碼的可讀性,下麵講一下Lambda 表達式的快捷語法,

          第一個快捷語法:以省略參數類型,因為定義委托的時候已經設置好了參數類型,它可以自動推算參數類型;且當只有一個參數的時候可以去掉小括弧,

  public void Test()
        {
            Func<string, string> funcToUpper;   //定義一個委托實例,輸入參數、返回值都是string類型
           //funcToUpper = Upper; //傳入一個方法變數
           //funcToUpper = delegate (string str){return str.ToUpper();};  //匿名方法
           //funcToUpper =  (string str)=>{return str.ToUpper();};
             funcToUpper = str=>{return str.ToUpper();}; 
            Console.WriteLine(funcToUpper("lxsh"));    
        }
View Code

       第二快捷語法:當方法體只有一行時可以去掉大括弧,且如果有返回值可以去掉return

public void Test()
        {
            Func<string, string> funcToUpper;   //定義一個委托實例,輸入參數、返回值都是string類型
           //funcToUpper = Upper; //傳入一個方法變數
           //funcToUpper = delegate (string str){return str.ToUpper();};  //匿名方法
           //funcToUpper =  (string str)=>{return str.ToUpper();};
           // funcToUpper = str=>{return str.ToUpper();};
            funcToUpper = str=> str.ToUpper();
            Console.WriteLine(funcToUpper("lxsh"));    
        }
View Code

    5.從匿名方法到Lambda 表達式完整的演變過程如下:

          

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 上接:.NetCore WebApi——基於JWT的簡單身份認證與授權(Swagger) 版本控制的好處是顯而易見的,利用Swagger展示不同版本的API更能體現效果。 1.安裝Nuget包:Microsoft.AspNetCore.Mvc.Versioning 2. 配置Startup類 2.1 ...
  • 1 //Program.cs 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Threading.Tasks; 6 using System.Windows.Forms; ... ...
  • 1 //Program.cs 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Threading.Tasks; 6 using System.Windows.Forms; ... ...
  • 本文主要以下麵幾個方面來詳細講解擴展方法:在C#3.0之前沒有擴展方法的狀態(或者你不會使用不知道擴展方法的時候)、擴展方法的語法及怎麼使用、怎麼正確的使用擴展方法; 一、首先說一下在C#3.0之前沒有擴展方法的狀態(或者你不會使用不知道擴展方法的時候) 1、大家在項目中肯定遇到類似這樣的需求且項目 ...
  • 註冊Microsoft密鑰 sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm 安裝.NET SDK 其他版本請參照微軟官方,這裡僅本人記錄。 https://dotnet.mi ...
  • TimeSpan的屬性和方法: 下麵的列表涵蓋了其中的一部分: 屬性: Add:與另一個TimeSpan值相加。 Days: 返回用天數計算的TimeSpan值。Hours: 返回用小時計算的TimeSpan值Milliseconds: 返回用毫秒計算的TimeSpan值。Minutes: 返回用分 ...
  • 視頻與PR:https://github.com/terrajobst/minsk/blob/master/docs/episode-02.md 作者是 Immo Landwerth(https://twitter.com/terrajobst),微軟 .NET 團隊的項目經理。 這一集的主要內容: ...
  • 前言我們之前研究過為什麼Unity的UI可以合批,是因為使用了相同的材質進行渲染,UI上不同圖片渲染是通過把圖片打成一張圖集後,使用Image組件對頂點填充了不同的UV值實現的。那麼有沒有什麼辦法可以讓3D的物體也像UI一樣,使用相同材質,但是可以表現出不一樣的樣子呢(比如顏色/位置等)?我們知道u ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...