C# Lamda到底是什么?!

lamda作為匿名函數,現在已經能夠出現子啊C#程序的任何可能位置,它可能作為參數為委托或其他函數復制,或者單獨作為表達式,或者承擔一些類似C++中內聯函數的一些作用承擔一些簡單計算。熟練的使用Lamda表達式能夠讓減少代碼的冗余,更快,更簡潔實現功能。

lamda表達式可采用以下任何一種:

表達式lamda,表達式作為主題

表達式位于 => 運算符右側的 lambda 表達式稱為“表達式 lambda”。 表達式 lambda 會返回表達式的結果,并采用以下基本形式:

 (輸入參數) => 表達式(input-parameter)=> expression

語句 lambda,語句塊作為其主體

(輸入參數)=>{語句列表}
(input-parameters) => { <sequence-of-statements> }

任何lamda都可以轉換為委托。 如果 lambda 表達式不返回值,則可以將其轉換為 Action 委托類型之一;否則,可將其轉換為 Func 委托類型之一。

Action和Func兩者最基本的區別是:前者適合那些需要帶返回值的委托,后者適合那些不帶返回值的委托。 Func 所引用的方法接收一個或者多個參數并帶有一個返回值,Action所引用的方法接收一個或者多個參數并且沒有返回值,換句話說,你的委托所引用的方法沒有返回值,這時候適合用 Action。

ex:

private void Actionlamda() {Action<string> print = name => {Debug.Log(name);};print("Hello World");// Hello World
}private void Funclamda() {Func<int, int, int> func = (lhs, rhs) => {return lhs + rhs;};Debug.Log(func(1,1));// 2
}

lamda表達式的輸入參數

使用空括號指定零個輸入參數:

Action line = () => Console.WriteLine();

只有一個參數時可以省略括號

Func<double, double> cube = x => x * x * x;

當具有兩個或兩個以上的參數時,中間用逗號加以分割

Func<int, int, bool> testForEquality = (x, y) => x == y;

當編譯器不能明確參數類型的時候可以顯示指定參數類型

Func<int, string, bool> isTooLong = (int x, string s) => s.Length > x;

輸入的參數必須全部是顯示或者隱式的,否則會產生錯誤

從C#9.0開始,可以使用棄元指定lamda表達式中不使用的參數

Func<int, int, int> constant = (_, _) => 42;

為了向后兼容,如果只有一個輸入參數命名為 ,則在 lambda 表達式中, 將被視為該參數的名稱。

所以可以是下面的情況:

Func<int, int> func = (_) => _+19;

從C# 12.0開始lamda表達式參數支持默認值

var IncrementBy = (int source, int increment = 1) => source + increment;Console.WriteLine(IncrementBy(5)); // 6
Console.WriteLine(IncrementBy(5, 2)); // 7

支持params 修飾參數

var sum = (params int[] values) =>
{int sum = 0;foreach (var value in values) sum += value;return sum;
};var empty = sum();
Console.WriteLine(empty); // 0var sequence = new[] { 1, 2, 3, 4, 5 };
var total = sum(sequence);
Console.WriteLine(total); // 15

params 是可變參數,用于在不清楚參數數目是使用,被修飾的參數必須是數組。
** EX:**

namespace ConsoleApp1
{class Program{static void Main(){UseParams(1, 2, 3); //既可以用任意多個intint[] myarray = new int[3] { 10, 11, 12 };UseParams(myarray); //也可以是int一維數組  UseParams2(1, 'a', new object() );}public static void UseParams(params int[] list){for (int i = 0; i < list.Length; i++){Console.WriteLine(list[i]);}Console.WriteLine();}public static void UseParams2(params object[] list){for (int i = 0; i < list.Length; i++){Console.WriteLine(list[i]);}Console.WriteLine();}}
}

lamda表達式和元組

private void LamdaText() {Func<(int, int), (int, int)> func = _ => (_.Item1*2, _.Item2 * 2) ;var num = (1,2);Debug.Log(func(num));// (2.4)
}

除了使用C# 內置的Item1,Item2在元組中也可以使用參數名參與運算

private void LamdaText() {Func<(int n1, int n2), (int, int)> func = _ => (_.n1 * 2, _.n2 * 2);var num = (1, 2);Debug.Log(func(num));// (2.4)
}

含標椎查詢語句的Lamda

Lamda可以結合Linq查詢語句,快速得到想要的結果

public override List<NodeBase> CacheNeighbors()
{return Neighbor = GridManager.Instance.Tiles.Where(t => Coords.GetDistance(t.Value.Coords) == 1).Select(t => t.Value).ToList();
}

Count 標準查詢運算符:

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
int oddNumbers = numbers.Count(n => n % 2 == 1);
Console.WriteLine($"There are {oddNumbers} odd numbers in {string.Join(" ", numbers)}");

其中包含 numbers 數組中位于 9 之前的所有元素,因為這是序列中第一個不符合條件的數字:

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var firstNumbersLessThanSix = numbers.TakeWhile(n => n < 6);
Console.WriteLine(string.Join(" ", firstNumbersLessThanSix));
// Output:
// 5 4 1 3

下示例通過將輸入參數括在括號中來指定多個輸入參數。 此方法返回 numbers 數組中的所有元素,直至發現值小于其在數組中的序號位置的數字為止:

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var firstSmallNumbers = numbers.TakeWhile((n, index) => n >= index);
Console.WriteLine(string.Join(" ", firstSmallNumbers));
// Output:
// 5 4

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

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

相關文章

Django圖書商城系統實戰開發-總結經驗之后端開發

Django圖書商城系統實戰開發-總結經驗之后端開發 簡介 在這篇博客中&#xff0c;我將總結經驗分享后端開發Django圖書商城系統的過程。在開發過程中&#xff0c;我遇到了各種挑戰和問題&#xff0c;并且通過實踐獲得了寶貴的經驗和教訓。通過本文&#xff0c;我希望能幫助讀者…

vue3+vite配置vantUI主題

?在項目中統一配置UI主題色&#xff0c;各個組件配色統一修改 vantUI按需安裝 參考vantUI文檔 創建vantVar.less文件夾進行樣式編寫 vantVar.less :root:root{//導航--van-nav-bar-height: 44px;//按鈕--van-button-primary-color: #ffffff;--van-button-primary-backgr…

linux——mysql的高可用MHA

目錄 一、概述 一、概念 二、組成 三、特點 四、工作原理 二、案例 三、構建MHA 一、基礎環境 二、ssh免密登錄 三、主從復制 master slave1 四、MHA安裝 一、環境 二、安裝node 三、安裝manager 一、概述 一、概念 MHA&#xff08;MasterHigh Availability&a…

力扣 198. 打家劫舍

題目來源&#xff1a;https://leetcode.cn/problems/house-robber/description/ C題解&#xff1a;因為是間接偷竊&#xff0c;所以偷nums[i]家前&#xff0c;一定偷過第i-2或者i-3家&#xff0c;因為i-1不能偷。 例如12345共5家&#xff0c;先偷第1家&#xff0c;那么2不能偷…

(三)Unity開發Vision Pro——入門

3.入門 1.入門 本節涵蓋了幾個重要主題&#xff0c;可幫助您加快visionOS 平臺開發速度。在這里&#xff0c;您將找到構建第一個 Unity PolySpatial XR 應用程序的分步指南的鏈接&#xff0c;以及 PolySpatial XR 開發時的一些開發最佳實踐。 2.開發與迭代 有關先決條件、開…

顯卡nvidia-smi后 提示Faild 解決過程,包含卸載重裝NVIDIA驅動步驟

顯卡異常: 顯卡nvidia-smi后 提示Faild 解決過程&#xff0c;卸載重裝nvidia驅動步驟 文章目錄 顯卡異常: 顯卡nvidia-smi后 提示Faild 解決過程&#xff0c;卸載重裝nvidia驅動步驟 [toc]1 緣由2 解決過程3 過程所需命令4 解決4.1 把該顯卡重新拔插一下卸載NVIDIA驅動的方法&a…

單元測試優化:為什么要對程序進行測試?測試有什么好處?

單元測試&#xff08;Unit Testing&#xff09;又稱為模塊測試, 是針對程序模塊&#xff08;軟件設計的最小單位&#xff09;來進行正確性檢驗的測試工作。 程序單元是應用的最小可測試部件。簡單來說&#xff0c;就是測試數據的穩定性是否達到程序的預期。 我們日常開發時可能…

19、SQL注入之SQLMAP繞過WAF

目錄 邏輯層1、邏輯問題2、性能問題 白名單方式一&#xff1a;IP白名單方式二&#xff1a;靜態資源方式三&#xff1a;url白名單方式四: 爬蟲白名單 sqlmap在測試漏洞的時候&#xff0c;選擇了no&#xff0c;它就不會去測試其它的了&#xff0c;我們一般選擇yes&#xff0c;為了…

Deep Learning With Pytorch - 最基本的感知機、貫序模型/分類、擬合

文章目錄 如何利用pytorch創建一個簡單的網絡模型&#xff1f;Step1. 感知機&#xff0c;多層感知機&#xff08;MLP&#xff09;的基本結構Step2. 超平面 ω T ? x b 0 \omega^{T}xb0 ωT?xb0 or ω T ? x b \omega^{T}xb ωT?xb感知機函數 Step3. 利用感知機進行決策…

SpringBoot整合Minio

SpringBoot整合Minio 在企業開發中&#xff0c;我們經常會使用到文件存儲的業務&#xff0c;Minio就是一個不錯的文件存儲工具&#xff0c;下面我們來看看如何在SpringBoot中整合Minio POM pom文件指定SpringBoot項目所依賴的軟件工具包 <?xml version"1.0" …

Ubuntu上安裝RabbitMQ

在Ubuntu上安裝RabbitMQ并設置管理員用戶為"admin"&#xff0c;密碼為"123456"&#xff0c;并開啟開機自啟 更新系統軟件包列表。在終端中執行以下命令&#xff1a; sudo apt update安裝RabbitMQ服務器軟件包。運行以下命令&#xff1a; sudo apt insta…

DaVinci Resolve Studio 18 for Mac 達芬奇調色

DaVinci Resolve Studio 18是一款專業的視頻編輯和調色軟件&#xff0c;適用于電影、電視節目、廣告等各種視覺媒體的制作。它具有完整的后期制作功能&#xff0c;包括剪輯、調色、特效、音頻處理等。 以下是DaVinci Resolve Studio 18的主要特點&#xff1a; - 提供了全面的視…

Linux 設置 ssh 內網穿透

背景&#xff1a;有三臺機器A、B、C&#xff0c;機器 A 位于某局域網內&#xff0c;能夠連接到互聯網。機器 B 有公網 IP&#xff0c;能被 A 訪問到。機器 C 位于另外一個局域網內&#xff0c;能夠連接到互聯網&#xff0c;能夠訪問 B。 目標&#xff1a;以 B 為中介&#xff…

Jmeter-壓測時接口按照順序執行-臨界部分控制器

文章目錄 臨界部分控制器存在問題 臨界部分控制器 在進行壓力測試時&#xff0c;需要按照順序進行壓測&#xff0c;比如按照接口1、接口2、接口3、接口4 進行執行 查詢結果是很混亂的&#xff0c;如果請求次數少&#xff0c;可能會按照順序執行&#xff0c;但是隨著次數增加&a…

Python-OpenCV中的圖像處理-模板匹配

Python-OpenCV中的圖像處理-模板匹配 模板匹配單對象的模板匹配多對象的模板匹配 模板匹配 使用模板匹配可以在一幅圖像中查找目標函數&#xff1a; cv2.matchTemplate()&#xff0c; cv2.minMaxLoc()模板匹配是用來在一副大圖中搜尋查找模版圖像位置的方法。 OpenCV 為我們提…

無線充電底座

<項目>無線充電器 前言 個人DIY的無線充電底座&#xff08;帶磁吸&#xff09;&#xff0c;基于IP6829方案。 Drawn By:67373 硬件部分 3D模型 資料開源鏈接 https://github.com/linggan17/WirelessCharge

面試熱題(每日溫度)

請根據每日 氣溫 列表 temperatures &#xff0c;重新生成一個列表&#xff0c;要求其對應位置的輸出為&#xff1a;要想觀測到更高的氣溫&#xff0c;至少需要等待的天數。如果氣溫在這之后都不會升高&#xff0c;請在該位置用 0 來代替。 輸入: temperatures [73,74,75,71,69…

SpringBoot + Mybatis多數據源

一、配置文件 spring: # datasource: # username: root # password: 123456 # url: jdbc:mysql://127.0.0.1:3306/jun01?characterEncodingutf-8&serverTimezoneUTC # driver-class-name: com.mysql.cj.jdbc.Driverdatasource:# 數據源1onedata:jdbc-url: j…

SCF金融公鏈新加坡啟動會 鏈結創新驅動未來

新加坡迎來一場引人矚目的金融科技盛會&#xff0c;SCF金融公鏈啟動會于2023年8月13日盛大舉行。這一受矚目的活動將為金融科技領域注入新的活力&#xff0c;并為廣大投資者、合作伙伴以及關注區塊鏈發展的人士提供一個難得的交流平臺。 在SCF金融公鏈啟動會上&#xff0c; Wil…

CentOS7的journalctl日志查看方法

多臺服務器間免密登錄|免密拷貝 Cenos7 搭建Minio集群部署服務器(一) Cenos7 搭建Minio集群Nginx統一訪問入口|反向動態代理(二) Spring Boot 與Minio整合實現文件上傳與下載(三) CentOS7的journalctl日志查看方法 MySQL8.xx一主兩從復制安裝與配置 1、概述 日志管理工…