匿名委托與Lambda表達式

来源:http://www.cnblogs.com/dw039/archive/2017/08/24/7421572.html
-Advertisement-
Play Games

通過使用匿名委托(匿名方法),使編程變得更加靈活,有關委托與匿名委托請參考我的前一篇Blog《委托與匿名委托》。 繼續之前示例,代碼如下: 上述程式worker將按照Main給定的參數與計算方式(method),計算出結果返回。根據等效性代碼可以進一步簡化,如下: 看到此處有過js、jquery開發 ...


通過使用匿名委托(匿名方法),使編程變得更加靈活,有關委托與匿名委托請參考我的前一篇Blog《委托與匿名委托》

繼續之前示例,代碼如下:

static void Main(string[] args)
{

            Worker.TwoNumberHandleMethodDelegate method =   delegate(int a, int b)
        {
            return a + b;
        };
           Worker worker = new Worker();
            int result = worker.HandleTwoNumber(10, 10,method);

            Console.WriteLine(String.Format("Result:{0}", result));

           Console.ReadLine();
}

上述程式worker將按照Main給定的參數與計算方式(method),計算出結果返回。根據等效性代碼可以進一步簡化,如下:

 static void Main(string[] args)
        {
            Worker worker = new Worker();
            int result = worker.HandleTwoNumber(10, 10, delegate (int a, int b)
            {
                return a + b;
            });

            Console.WriteLine(String.Format("Result:{0}", result));

            Console.ReadLine();
        }

看到此處有過js、jquery開發經驗的朋友可能會突感親切,哦...匿名函數。在jquery中到處都用的$("#id").click(function(){.........})。

C#中對於匿名委托在使用時可以進一步精簡,再精簡的結果就變成了表達式,稱為Lambda表達式。

static void Main(string[] args)
        {

            Worker.TwoNumberHandleMethodDelegate method =   delegate(int a, int b)
        {
            return a + b;
        };
}

Lambda表達式表述:

static void Main(string[] args)
        {

            Worker.TwoNumberHandleMethodDelegate method =   (a, b)=>
        {
            return a + b;
        };
}

C# Lambda表達式使用 => 分為前後兩部分,(a, b) 為參數列表,{....}為方法體。

 static void Main(string[] args)
        {
            Worker worker = new Worker();
            int result = worker.HandleTwoNumber(10, 10, (a, b) =>
            {
                return a + b;
            });

            Console.WriteLine(String.Format("Result:{0}", result));

            Console.ReadLine();
        }

下麵給出方法與Lambda表達式轉換對照

private void A1()
        {
            Console.WriteLine("....");
        }
//Lambda
()=>{Console.WriteLine("....");};
//如果方法體代碼只有一句,如上還可省去方法體大括弧
()=>Console.WriteLine("....");
private string A2(int a, int b)
        {
            return String.Format("{0}+{1}={2}", a, b, a + b);
        }
        //如上示例可簡化為
        (a,b)=>{return String.Format("{0}+{1}={2}", a, b, a + b);}
        //因為方法體只有一句,可進一步簡化
        (a,b)=> String.Format("{0}+{1}={2}", a, b, a + b);
        //此時註意return應該去掉,C#編譯器自動識別=>做返回值
private string A3(int a)
        {
            return String.Format("{0}", a);
        }
        //上面示例可簡化為
        (a)=>String.Format("{0}", a);
        //如果參數列表只有一個參數,參數列表的()可以去掉,上面進一步簡化為
        a=>String.Format("{0}", a);

通過這篇文章你可能已經意識到在C#中,方法、委托、匿名方法,lambda表達式並無明顯區分邊界,它們之間可以靈活轉化。在實際開發中關於委托的知識點非常多,如委托與事件。如果時間允許,希望能把委托深化的文章寫一下。


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

-Advertisement-
Play Games
更多相關文章
  • 第 9 章:常用的設計模式 9.1 聚合組件 考慮為常用的特性域提供聚合組件。 要用聚合組件來對高層的概念(物理對象)進行建模,而不是對系統級的任務進行建模。 要讓聚合組件的名字與眾所周知的系統實體相對應,比如 MessageQueue、Process 或 EventLog,這樣就能使類型更加引人註 ...
  • 為什麼有這種需求, 原因是這樣的, 公司有一個Java的web項目,在另一臺伺服器A上,最近老闆一時興起,想把他合併到這台穩定點的伺服器B上,伺服器B上使用IIS來寄宿asp.net 網站, 怎麼辦呢,硬著頭皮上吧,在網上找各種解決方案: 解決方案一:isapi_redirect 這個方法按照方法試 ...
  • 在網路編程過程中需要向伺服器上傳文件。 Multipart/form-data是上傳文件的一種方式。 ...
  • 創建和開發ASP.NET Core應用可以有二種方式:最簡單的方式是通過visual studio 2017 來創建,其優點是簡單方便,但需要安裝最新版本visual studio 2017 preview 15.3 。另一種方式是使用visual studio code來創建,vscode 則是一... ...
  • 微信分享代碼,先引入: 獲取簽名: 分享代碼: wxsign輸出的json ...
  • 1、導出Excel : 首先引用NPOI包(Action一定要用FileResult) /// <summary> /// 批量導出需要導出的列表 /// </summary> /// <returns></returns> public FileResult ExportStu2() { //獲取 ...
  • ASP.NET Core 是新一代的 ASP.NET,第一次出現時代號為 ASP.NET vNext,後來命名為ASP.NET 5,隨著它的完善與成熟,最終命名為 ASP.NET Core,表明它不是 ASP.NET 的升級,而是一個重新設計的Web開發框架。而它一個非常重要的變化就是它不再依賴於I ...
  • 基於業務組件模型的工作流模塊設計 摘要 當前基於 BPLE 的業務流程管理(BPM)以及基於 XPDL 的工作流(WF)都有成熟的理論和相應的產品支持,特別是在國內,工作流(WF)的應用十分廣泛。本文從流程入手,結合業務流程管理、工作流、績效管理、個人門戶等概念,將業務流程管理和工作流結合起來 ,搭 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...