C# 本地方法和lambda實現

概念: 本地函數是一種嵌套在另一成員中的類型的方法。 僅能從其包含成員中調用它們。

下面是本地方法最簡單的一個demo:

public static int Show(){int c = NewMethod();?return c;static int NewMethod(){#region 測試int a = 3;int b = 9;int c = a + b;#endregionreturn c;}}

本地函數語法

?本地函數可使代碼意圖明確。 任何讀取代碼的人都可以看到,此方法不可調用,包含方法除外。 對于團隊項目,它們也使得其他開發人員無法直接從類或結構中的其他位置錯誤調用此方法。

本地方法使用注意事項:

1. 本地函數不能使用修飾符,因為都是私有的,包括訪問修飾符(如?private?關鍵字)會生成編譯器錯誤 CS0106“修飾符‘private’對于此項無效”。

2. 本地函數,本地方法一般放在方法的結尾

private static string GetText(string path, string filename)
{var reader = File.OpenText($"{AppendPathSeparator(path)}{filename}");var text = reader.ReadToEnd();return text;string AppendPathSeparator(string filepath){return filepath.EndsWith(@"\") ? filepath : filepath + @"\";}
}


? ? ?本地函數與 Lambda 表達式

本地函數和?Lambda 非常相似。 但是,應該注意,從兩者中選用一種的時機和條件其實是存在差別的。

讓我們檢查一下階乘算法的本地函數實現和 lambda 表達式實現之間的差異。 下面是使用本地函數的版本:

public static int LocalFunctionFactorial(int n)
{
? ? return nthFactorial(n);

? ? int nthFactorial(int number) => number < 2?
? ? ? ? ? 1?
? ? ? ? : number * nthFactorial(number - 1);
}

public static int LambdaFactorial(int n)
{
? ? Func<int, int> nthFactorial = default(Func<int, int>);

? ? nthFactorial = number => number < 2
? ? ? ? ? 1
? ? ? ? : number * nthFactorial(number - 1);

? ? return nthFactorial(n);
}

明確賦值

Lambda 表達式是在運行時聲明和分配的對象。 若要使用 Lambda 表達式,需要對其進行明確賦值:必須聲明要分配給它的?Action/Func?變量,并為其分配 Lambda 表達式。 請注意,LambdaFactorial?必須先聲明和初始化 Lambda 表達式?nthFactorial,然后再對其進行定義。 否則,會導致分配前引用?nthFactorial?時出現編譯時錯誤。

本地函數在編譯時定義。 由于未將它們分配給變量,因此可以從范圍內的任意代碼位置引用它們;在第一個示例?LocalFunctionFactorial?中,我們可以在?return?語句的上方或下方聲明本地函數,而不會觸發任何編譯器錯誤。

這些區別意味著使用本地函數創建遞歸算法會更輕松。 你可以聲明和定義一個調用自身的本地函數。 必須聲明 Lambda 表達式,賦給默認值,然后才能將其重新賦給引用相同 Lambda 表達式的主體。

int M()
{
? ? int y;
? ? LocalFunction();
? ? return y;

? ? void LocalFunction() => y = 0;
}

這段代碼定義了一個名為LocalFunction()的方法,該方法使用lambda表達式定義了一個局部函數,并將其實現設為將變量y的值設為0。

等于如下:

void LocalFunction()
{
? ? y = 0;
}
?實現詳細信息包括本地函數的閉包是作為?class?還是?struct?實現。 本地函數可能使用?struct,而 lambda 將始終使用?class

雖然本地函數對 lambda 表達式可能有點冗余,但實際上它們的目的和用法都不一樣。 如果想要編寫僅從上下文或其他方法中調用的函數,則使用本地函數更高效。

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

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

相關文章

python opencv實現車牌識別

目錄 一:實現步驟: 二:實現車牌檢測 一:實現步驟: 使用Python和OpenCV實現車牌識別的步驟大致可以分為以下兩部分: 車牌檢測: 讀取需要進行車牌識別的圖片。 對圖像進行灰度化處理,可能還包括高斯模糊和灰度拉伸。 進行開運算,消除圖像中的噪聲。 將灰度拉伸后的圖…

培養納稅籌劃思維方式,企業稅務籌劃實務操作

一、教程描述 本套稅務籌劃教程&#xff0c;大小447.87M&#xff0c;共有6個文件。 二、教程目錄 前言.mp4 培養納稅籌劃思維方式.mp4 增值稅的稅務籌劃.mp4 企業所得稅的稅務籌劃.mp4 個人所得稅的稅務籌劃.mp4 企業稅務籌劃實務操作&#xff08;課件&#xff09;.pdf…

MDST150-16-ASEMI三相可控整流模塊MDST150-16

編輯&#xff1a;ll MDST150-16-ASEMI三相可控整流模塊MDST150-16 型號&#xff1a;MDST150-16 品牌&#xff1a;ASEMI 正向電流&#xff08;Id&#xff09;&#xff1a;150A 反向耐壓&#xff08;VRRM&#xff09;&#xff1a;1600V 正向浪涌電流&#xff1a;1200A 正…

大數據揭秘:Hadoop短視頻流量分析實戰

??計算機編程指導師 ??個人介紹&#xff1a;自己非常喜歡研究技術問題&#xff01;專業做Java、Python、微信小程序、安卓、大數據、爬蟲、Golang、大屏等實戰項目。 ??實戰項目&#xff1a;有源碼或者技術上的問題歡迎在評論區一起討論交流&#xff01; ?? Java實戰 |…

PyTorch概述(一)---圖像變換和增強

TorchVision torchvision 包由流行的數據集、模型架構以及用于計算機視覺的通用圖片轉換工具組成 TorchVision 包構成 圖像變換和增強TVTensors模型和預訓練的權重數據集工具操作圖像和視頻的編/解碼用于模型檢測的特征提取 圖像變換和增強 torchvision支持通用的計算機視…

基于springboot+vue的車輛管理系統(前后端分離)

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

獲取淘寶商品詳情API、商品主圖、圖片搜索api

獲取淘寶詳情API的方式有以下幾種&#xff1a; 使用淘寶開放平臺提供的接口&#xff1a;淘寶開放平臺提供了多個API接口&#xff0c;讓開發者可以通過接口獲取商品詳情信息。你可以到淘寶開放平臺官網申請開發者賬號&#xff0c;并查看相關接口文檔&#xff0c;了解如何使用接…

C語言翻譯環境:預編譯+編譯+匯編+鏈接詳解

目錄 翻譯環境和運行環境 翻譯環境 預處理&#xff08;預編譯&#xff09; 編譯 詞法分析 語法分析 語義分析 匯編 鏈接 運行環境 ?翻譯環境和運行環境 在ANSI C的任何?種實現中&#xff0c;存在兩個不同的環境。 第1種是翻譯環境&#xff0c;在這個環境中源代碼被…

H橋逆變方式介紹(單極性)

H橋逆變電路實現的就是一個從DC——AC的過程 這個電路有兩個時序&#xff0c;Q6Q4是一個導通時序&#xff0c;Q5Q7是一個導通時序 左邊兩個是高頻20KHZ的、互補的sPWM波&#xff0c;右邊是低頻的50HZ的PWM波 三角波一般叫載波&#xff0c;正弦波叫調制波&#xff08;單片機內…

Hbase和Clickhouse對比簡單總結

Hbase和Clickhouse是兩種不同的數據庫系統&#xff0c;它們各自適用于不同的場景。以下是兩者之間的對比&#xff1a; 數據模型&#xff1a; HBase 是一種基于列的存儲系統&#xff0c;它適合處理大規模的數據集&#xff0c;特別是那些需要快速隨機訪問的場景。ClickHouse 則是…

對“絕地求生“源碼調節

調整了一些界面和降低游戲難度 #include "c.h" using namespace std; ExMessage msg; struct ME {int x 100; int y 100; int life 1000; int knapsack[18]; int Maximum_ammunition_capacity 0;int Ammunition_capacity 0; int primary_weapon 0; int moveme…

springboot/ssm倉庫管理系統Java貨物出入庫管理系統wms系統web

springboot/ssm倉庫管理系統Java貨物出入庫管理系統wms系統web 基于springboot(可改ssm)vue項目 開發語言&#xff1a;Java 框架&#xff1a;springboot/可改ssm vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服務器&#xff1a;tomcat 數據庫&#xff1a…

Vi/Vim 使用小竅門,如何消除搜索后的關鍵字高亮

Vim/Vi 基本上是 *nix 世界最受歡迎的編輯器了&#xff0c;不知道為什么&#xff0c;一直以來覺得和 Emacs 比起來&#xff0c;Vim 更加有親和力。用起來很舒服。 今天就記錄一個困擾了我很久的問題。 大家應該都知道&#xff0c;在 Vi 里面如果要搜索某個關鍵字&#xff0c;…

C語言開發教程

C語言開發教程 電子書下載 下載地址 第一章 導言 1.1 入門 1.2 變量與算術表達式 1.3 for語句 1.4 符號常量 1.5 字符輸入/輸出 1.6 數組 1.7 函數 1.8 參數--傳值調用 1.9 字符數組 1.10 外部變量與作用域 第二章 類型、運算符與表達式 2.1 變量名 2.2 數據類型及長度 2.3 常…

汽車會撞死人,應不應該限制汽車?

激進派表示事故率很低&#xff0c;損失相比汽車帶來的收益不值一提&#xff0c;不能限制汽車 保守派表示行人什么也沒有做錯&#xff0c;卻飛來橫禍&#xff0c;只要發生一起事故&#xff0c;可能對一個家庭就是滅頂之災&#xff0c;應該嚴格限制汽車 兩邊都有道理&#xff0c…

Python-pdfplumber讀取PDF內容

文章目錄 前言一、pdfplumber模塊1.1 pdfplumber的特點1.2 pdfplumber.PDF類1.3pdfplumber.Page類 二 pdfplumber的使用2.1 加載PDF2.2 pdfplumber.PDF 類2.3 pdfplumber.Page 類2.4 讀取PDF2.5 讀取PDF文檔信息2.6 查看總頁數2.7 查看總頁數讀取第一頁的寬度&#xff0c;頁高等…

263集成客服系統:提升電商平臺用戶體驗

{連接&#xff1a;無縫整合客服渠道} 在電子商務領域&#xff0c;客服是保持客戶滿意度和忠誠度的關鍵因素。263集成客服系統允許電商平臺無縫連接到各種客服通道&#xff0c;包括在線聊天、電子郵件和社交媒體等。這種無代碼開發方式不僅消除了傳統API開發的復雜性&#xff…

使用Java調用Cplex求解帶時間窗的車輛路徑問題

使用Java調用Cplex求解VRPTW問題 一、帶時間窗車輛路徑優化問題&#xff08;Vehicle Routing Problem with Time Window&#xff0c;VRPTW&#xff09;1.1 問題描述1.2 模型構建 二、使用Java調用Cplex求解VRPTW問題2.1 完整代碼2.2 求解結果 三、求解過程中踩的坑 一、帶時間窗…

DevOps:實現軟件開發與運維的協同革命

DevOps作為一種新型的軟件開發和運維模式&#xff0c;在當今信息技術領域引起了廣泛關注和應用。本文通過對DevOps的定義、原則、核心實踐以及優勢等方面進行探討&#xff0c;旨在深入剖析DevOps對軟件開發與運維的革命性影響&#xff0c;并從實踐角度探討其在現代軟件開發中的…

VsCode編譯wxWidgets的HelloWorld

wxWidgets 環境搭建 在wxWidgets 官網下載頁面點擊Download Windows Binaries選擇TDM-GCC 10.3和MinGW-w64 8.1下的頭文件和開發包進行下載。這兒我們會用兩種 gcc 編譯器進行對比&#xff0c;所以下載 2 個種編譯器對應的庫文件。正常只需根據自己安裝的編譯器下載對應的 1 種…