溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Lambda簡化C#編程

發布時間:2021-06-17 15:47:42 來源:億速云 閱讀:167 作者:chen 欄目:編程語言

這篇文章主要介紹“怎么用Lambda簡化C#編程”,在日常操作中,相信很多人在怎么用Lambda簡化C#編程問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用Lambda簡化C#編程”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1、Lambda表達式是與委托緊密聯系的。只要有委托參數類型的地方,就可以使用Lambda表達式。

Lambda表達式的運算符是=>。運算符左邊列舉出了需要的參數,右邊定義了賦予Lambda變量的方法的實現代碼。下面這段代碼是一個最簡單的使用方法

public class MyLambda{    public void disPlay()      {        string mid = ",middle part,";          Func<string, string> lambda = param =>              {                param += mid;                param   += "and this was added to the string";                  return param;            };        Console.WriteLine  (lambda("Start of string"));    }}

Func<string, string>是一個委托類型。包含兩個參數:一個輸入的string和一個輸出的string.

parm是輸入參數,所以他的類型可以認為是string類型的(當然很多地方會出現沒有名字的類型的)。

運算符=>右邊表示一個方法,這個方法沒有名字。這個方法賦予了變量lambda。

在本例中,通過Console.WriteLine(lambda("Start of string"));向lambda方法傳遞參數“Start of string”.經處理后會有這樣的輸出:

Start of string,middle part,and this was added to the string。

所以我想這樣理解:Lambda表達式表示是一個函數的另一種寫法。運算符=>左邊是輸入,右邊是函數體。函數體需不需要返回值,由接收這個函數定義的lambda表達式的委托決定。

2、Lambda表達式的參數。

lambda表達式如果只有一個參數,只寫出參數名就行了。下邊的lambda表達式使用了參數s,因為委托類型定義了一個string類型。所以s的類型就是string。實現函數體的代碼調用了String.Format()方法返回一個字符串,在調用委托是就直接把字符串輸出了:

Func<string, string> oneParam = s =>    {        return   String.Format("Change To UpperCase {0}", s.ToUpper  ());    };  Console.WriteLine( oneParam("abc"));

注:Func<string,string>是一個系統定義的帶有一個輸入和一個輸出的委托。

如果委托有多個參數,就要把參數放到括號中,如下:

Func<double, double, double> twoParam = (x, y) =>      {        return x * y;    };

3、單行代碼和多行代碼

如果Lambda表達式只有一條語句,在方法塊內就不需要花括號和return語句了,編譯器會自動添加一條隱式的return語句。如上邊的兩個表達式可以分別表示為:

Func<string, string> oneParam = s => String.Format  ("Change To UpperCase {0}", s.ToUpper());Func<double,   double, double> twoParam = (x, y) => x * y;

但是如果Lambda表達式實現代碼需要多條語句時,就必須添加花括號和return語句了。如***個例子的代碼。

4、Lambda表達式的外部變量

Lambda表達式可以使用外部變量。但使用時應該注意些問題:

先看下邊的代碼:

int someVar = 5;Func<int, int> f = x => x +   someVar;someVar = 10;Console.WriteLine(f(5));

輸出應該是x+5還是x+10呢?運行下發現輸出15(x+10).即修改外部變量someVar后,會使用外部變量的新值。

對于表達式x => x + someVar; 編譯器會創建一個匿名類,他有一個構造函數來傳遞外部變量。該構造函數取決于從外部傳遞過來的變量個數。對于上邊這個例子,我們可以認為構造函數接受一個int,匿名類包含了一個匿名方法,其實現代碼和返回類型有lambda表達式定義:

public class AnonymousClass{    private int someVar;      public AnonymousClass(int someVar)    {          this.someVar = someVar;    }    public int   AnonymousMethod(int x)    {        return x +   someVar;    }}

使用Lambda表達式時,調用該方法(AnonymousMethod(int x)),會創建匿名類的一個實例(相當于new AnonymousClass(somevar)),并傳遞調用該方法時的變量的值。

到此,關于“怎么用Lambda簡化C#編程”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女