C# lambda表達式與匿名方法

文章目錄

  • 匿名方法
  • Lambda表達式
    • 實例
    • 實例

  • 博主寫作不容易,孩子需要您鼓勵
  • 萬水千山總是情 , 先點個贊行不行

C#中的匿名方法是在C#2.0引入的,它終結了聲明委托的唯一方法是使用命名方法的時代。在C#更高版本中,Lambda表達式取代了匿名方法,作為編寫內聯代碼的首選方式。但是,匿名方法的信息同樣也適用Lambda表達式,可以說Lambda表達式就是匿名方法演變過來的。匿名方法可以用來忽略參數列表,可以轉化為具有各種簽名的委托,而這對于Lambda表達式來說是不可能的。

匿名方法

要將代碼塊傳遞為委托參數,創建匿名方法則是唯一的方法。匿名方法就是為了將代碼塊傳遞為委托參數,因此也有人將其稱為匿名委托。使用C#匿名方法可以使委托及事件的代碼編寫更加精簡、高效。一般情況下,事件注冊事件處理方法,需要首先定義這個方法,如果該方法僅用于訂閱特定的事件,則可使用代碼更加簡明的匿名方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace test
{class Program{static void Main(string[] args){Heater heater = new Heater();heater.BoilEvent += delegate(int param){Console.WriteLine("Alarm:dididid,水已經{0}℃了", param);};heater.BoilEvent += delegate(int param){Console.WriteLine("Display:水快開了,當前溫度為:{0}℃", param);};heater.BoilWater();Console.ReadKey();}}public class Heater{private int temperature;//水溫public delegate void BoilHandle(int x);//聲明關于事件的委托public event BoilHandle BoilEvent;//聲明水要燒開的事件public void BoilWater(){ //燒水的方法for (int i = 0; i <= 100; i++){temperature = i;if (temperature > 96){if (BoilEvent != null){BoilEvent(temperature);}}}}}}

運行結果
在這里插入圖片描述

Lambda表達式

Lambda表達式是一種可用于創建委托或表達式目錄樹類型的匿名函數。通過使用lambda表達式,可以寫入可作為參數傳遞或作為參數傳遞或作為函數調用值返回的本地函數。Lambda表達式對于編寫LINQ查詢表達式特別有用。若要創建Lambda表達式,需要在Lambda運算符=>左側指定輸入參數,然后在另一側輸入表達式或語句塊。

實例

lambda表達式x=>x*x指定名為x的參數并返回x的平方值。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;namespace test
{class Program{static void Main(string[] args){Expression<del> myET = x => x * x;Console.ReadKey();}}
}

委托簽名具有一個int類型的隱式類型輸入參數,并返回int。可以將lambda表達式轉換為該類型的委托,因為該表達式也具有一個輸入參數(x),以及一個編譯器可隱式轉換為int型的返回值。
表達式位于=>運算符右側的lambda表達式稱為lambda表達式。表達式lambda廣泛用于C#的表達式樹的構造。表達式lambda會返回表達式的結果。

實例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;namespace test
{class Program{public delegate bool ShortDelegate(int[] x);static void Main(string[] args){int[] arr = new int[] { 8, 4, 5, 6, 2, 1, 3, 7, 9, 0 };Console.WriteLine("未排序前數組序列為:");foreach (int i in arr){Console.Write("{0},", i);}ShortDelegate MyDelegate = array => {for (int i = array.GetUpperBound(0); i >= 0; i--)//循環從后向前分別取出數組中的一個元素{//冒泡排序,將數值小的元素移到后面,直到所有的元素按照降序排列for (int j = 0; j <= i; j++){if (array[j] <= array[i]){//交換兩個元素位置int z = array[j];array[j] = array[i];array[i] = z;}}}return true;};MyDelegate(arr);//調用委托排序Console.WriteLine("\n排序后數組序列為:");foreach (int i in arr){Console.Write("{0},", i);}Console.ReadKey();}}}

運行結果:
在這里插入圖片描述

------------------------------------------------------------------------------------------分割線
------------------------------------------------------------------------------------------
  • 博主簡介:
  • 工業自動化上位機軟件工程師、機器視覺算法工程師、運動控制算法工程師。目前從業于智能制造自動化行業。 博主郵箱:2296776525@qq.com
  • 幫忙點個贊吧。哈哈。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254262.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254262.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254262.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LINUx打包命令匯總

.tar 解包&#xff1a;tar xvf FileName.tar 打包&#xff1a;tar cvf FileName.tar DirName &#xff08;注&#xff1a;tar是打包&#xff0c;不是壓縮&#xff01;&#xff09; ——————————————— .gz 解壓1&#xff1a;gunzip FileName.gz 解壓2&#xff1a;…

常用的相似度計算

在數據分析和數據挖掘的過程中&#xff0c;我們經常需要知道個體間差異的大小&#xff0c;進而評價個體的相似性和類別。最常見的是數據分析中的相關分析&#xff0c;數據挖掘中的分 類和聚類算法&#xff0c;如K最近鄰&#xff08;KNN&#xff09;和K均值&#xff08;K-Means&…

玩轉C#窗體-屬性、方法和事件詳細說明

文章目錄簡介Windows窗體的基本屬性一、布局屬性1、StartPosition屬性2、Location屬性3、尺寸屬性4、WindowsState屬性5、Autoscroll屬性6、AutoSize屬性二、樣式屬性1、ControlBox屬性2、MaximizeBox屬性3、MinimizeBox屬性4、HelpButton屬性5、ShowIcon屬性6、Icon屬性7、Sho…

for循環和數組練習

//公雞2文&#xff0c;母雞1文&#xff0c;小雞半文&#xff0c;每種至少一只&#xff0c;100文買100只雞有多少種可能var ci 0; for(var g1;g<50;g){for(var m1;m<100;m){for(var x1;x<100;x){if(g*2m*1x*(0.5)100&&gmx100){ci1;console.log("買公雞&qu…

CMD下查看路由表

在cmd下面輸入route print 就可以查看路由表 如何讀懂路由表如何讀懂路由表 源碼:--------------------------------------------------------------------------------Active Routes: Network Destination Netmask Gateway Interface M…

c# automapper 使用

一、最簡單的用法 有兩個類User和UserDto 1 public class User2 {3 public int Id { get; set; }4 public string Name { get; set; }5 public int Age { get; set; }6 }7 8 public class UserDto9 { 10 public string Na…

js正則歸納

/* * 正則的緩存區 * 一、 var numadb1122;var reg/(\d)\1(\d)\2/gi;console.log(num.match(reg));//[ 1122 ]二、普通字符&#xff1a;a b c 1 2 3 特殊字符&#xff1a;\d \w \D //w d 是什么三、元字符中限定符* &#xff1a; 匹配0到多 &#xff1a; 匹配1到…

洛谷 P1469 找筷子

題目描述 經過一段時間的緊張籌備&#xff0c;電腦小組的“RP餐廳”終于開業了&#xff0c;這天&#xff0c;經理LXC接到了一個定餐大單&#xff0c;可把大家樂壞了&#xff01;員工們齊心協力按要求準備好了套餐正準備派送時&#xff0c;突然碰到一個棘手的問題&#xff0c;筷…

玩轉C#控件-常用控件屬性

文章目錄概述Control類的基本屬性1、Name屬性2、Text屬性3、Anchor屬性4、Dock屬性Control類的方法和事件博主寫作不容易&#xff0c;孩子需要您鼓勵 萬水千山總是情 , 先點個贊行不行 概述 控件是包含在窗體上的對象&#xff0c;是構成用戶界面的基本元素&#xff0c;也是…

LazyT 提供對延遲初始化的支持

延遲初始化 就是在第一次使用的時候在 進行類的初始化 public class Student{public Student(){this.Name "DefaultName";this.Age 0;Console.WriteLine("Student is init...");}public string Name { get; set; }public int Age { get; set; }} public…

264標準中高復雜度的三方面

一、運功估計搜索 二、碼率控制 三、濾波算法 在264中&#xff0c;這三方面占據了絕大部分的計算復雜度。具體原因或是優化的具體步驟有時間補上。

ie瀏覽器不支持多行隱藏顯示省略號

平時在寫頁面過程中&#xff0c;相信大家都遇到過文本顯示多行后用省略號代替的問題&#xff0c;來看看代碼&#xff1a; p{display: -webkit-box;overflow: hidden;text-overflow: ellipsis;-webkit-line-clamp:12;//表示顯示12行之后用省略號代替-webkit-box-orient:vertical…

API設計原則 - Qt官網的設計實踐總結

原文鏈接&#xff1a;API Design Principles - Qt Wiki 基于Gary的影響力上 Gary Gao 的譯文稿&#xff1a;C的API設計指導 譯文發在酷殼 - CoolShell&#xff1a;API設計原則&#xff0c; 2017-07-25 API設計原則 - Qt官網的設計實踐總結 &#x1f34e; 譯序 Qt的設計水準在業…

python帶參裝飾器的改良版

簡單點就是這種 def deco2(param1):def _deco2(fun):def __deco2(*args, **kwargs):print (param)fun(*args, **kwargs)return __deco2return _deco2deco2 # 錯誤的寫法 def f2(strx):print (strx)f2(hello) 運行上面這個&#xff0c;期待打印1和hello 實際上是不…

H.264邊緣塊進行幀內預測時,上邊緣和左邊緣塊的預測情況。

僅僅介紹上邊緣塊需要用到上面的像素&#xff08;不存在&#xff09;&#xff08;例如垂直模式&#xff09;&#xff0c;左邊緣快需要用到左邊的像素&#xff08;不存在&#xff09;&#xff08;例如水平模式&#xff09;的情況。 H.264 I幀邊緣塊的處理 I幀的第一個左上的邊緣…

P1021 郵票面值設計

P1021 郵票面值設計 題目描述 給定一個信封&#xff0c;最多只允許粘貼N張郵票&#xff0c;計算在給定K&#xff08;NK≤15&#xff09;種郵票的情況下&#xff08;假定所有的郵票數量都足夠&#xff09;&#xff0c;如何設計郵票的面值&#xff0c;能得到最大值MAX&#xff0c…

第七章:XAML vs. code(3)

屬性元素語法這里有一些C&#xff03;與第4章中的FramedText代碼相似。在一個語句中&#xff0c;它實例化一個Frame和一個Label&#xff0c;并將Label設置為Frame的Content屬性&#xff1a; new Frame {OutlineColor Color.Accent,HorizontalOptions LayoutOptions.Center,Ve…

QtCreator5.12.6安裝圖文教程

前言接觸過Qt的同學肯定用過QtCreator,本id最近常用&#xff0c;也就寫個教程記錄一下安裝的過程。可能比較少人學過Qt&#xff0c;感覺Qt還是挺不錯的&#xff0c;做出來的界面還算好看&#xff0c;關鍵是跨平臺。說明&#xff1a;安裝的系統&#xff1a;win10專業版QtCreator…

H.264學習(一)——幀和場的概念

一、何謂場&#xff1f; 每個電視幀都是通過掃描屏幕兩次而產生的&#xff0c;第二個掃描的線條剛好填滿第一次掃描所留下的縫隙。每個掃描即稱為一個場。因此 25 幀/秒的電視畫面實際上為 50 場/秒 (若為 NTSC 則分別為 30 & 60 - 因為我是中國人&#xff0c;因此我采用 P…

【實踐】js實現隨機不重復抽取數組中元素

經過3個星期的時間終于用做完了學校的練習作品了&#xff0c;但是發現在用jq 做互動雖然很方便但卻帶來了不少的煩惱 所以在以后的日子里我要好好學 js 了&#xff01; 然后呢在博主之前學java 里面 另我最頭痛的就是做產生隨機不重復的數據了 今天自己再鞏固了一下以前的知識再…