Lambda 表達式

Lambda

什么是Lambda表達式

  1. 簡單來說释涛,編程中提到的 lambda 表達式,通常是在需要一個函數(shù)倦沧,但是又不想費神去命名一個函數(shù)的場合下使用唇撬,也就是指匿名函數(shù)。
  2. 可以使用委托對象調用可由委托引用的方法展融,提供了一種傳遞代碼塊作為委托參數(shù)的技術窖认。匿名方法是沒有名稱只有主體的方法。
  3. 在Lambda中您不需要指定返回類型,它是從方法主體內(nèi)的 return 語句推斷的扑浸。

如何使用Lambda表達式

一. Lambda表達式的由來:

  1. 基于委托創(chuàng)建Lambda表達式 以下代碼將表述從 匿名函數(shù)—>最簡化的Lambda 表達式的過程:
public delegate void NoReturnWithPara(int x,int y);  //創(chuàng)建一個委托
class MyLamda
{
    public static void Show()
    {
        NoReturnWithPara method0 = new NoReturnWithPara(ShowSomething); //將委托綁定方法

        /*創(chuàng)建一個匿名函數(shù)   即 在實例化委托對象的時候 將函數(shù)內(nèi)容寫入初始化中*/
        NoReturnWithPara method2 = new NoReturnWithPara(
        delegate (int x, int y) //匿名方法
        {
            /*方法體*/
            Console.WriteLine("delegate");
        }
        );

        /*創(chuàng)建一個初始版Lambda表達式  優(yōu)化上例部分內(nèi)容   即  去除上例中 delegate關鍵字 改為 最后加入 => 符號*/
          NoReturnWithPara method3 = new NoReturnWithPara(
          (int x, int y) =>  //初形 Lambda
           {
               /*方法體*/
              Console.WriteLine("delegate");
          }
          );

        /*完整的 Lambda 出現(xiàn)   即  優(yōu)化參數(shù)列表 參數(shù)類型不必明確聲明 類型根據(jù)當前委托的參數(shù)類型 去除new實例過程*/
           NoReturnWithPara method4 = 
           (x, y) => //參數(shù)列表  參數(shù)類型可以去除
           {
               /*方法體*/
               Console.WriteLine("delegate"); 
           };

         /*優(yōu)化上例部分內(nèi)容   即  去除了{}烧给,但是方法體只能有一行內(nèi)容*/
            NoReturnWithPara method5 = new NoReturnWithPara(
            (x, y) => 
                /*方法體 一行*/
                Console.WriteLine("delegate")
            );

         /*終極優(yōu)化  方法體只能一行  -----  類似簡寫委托   即 取消實例化 new過程 */
           NoReturnWithPara method6 = (x, y) =>  /*方法體 一行*/ Console.WriteLine("delegate");

    }

    static void ShowSomething(int x, int y)
    {
        Console.WriteLine("ShowSomeThing");
    }
}

如上 是帶有參數(shù)的委托的Lambda表達式簡化形式。還有另外一些寫法就不一一闡述了喝噪。

  1. 以下寫一個有參數(shù) 有返回值的Lambda寫法
public delegate int WithReturnNoPara(int x);
class MyLamda
{

    public static void Show()
    { 
        WithReturnNoPara method11 = 
        (int a) =>
        {
            return a;
        };
        Console.WriteLine(method11(5));


         //只有一個參數(shù)時 不需要括號  當只有一條方法體 返回數(shù)據(jù)無需 return 修飾
        WithReturnNoPara method10 = x => x;
        Console.WriteLine(method10(5));
    }
}

如上 會打印得到值 5 如此為有參數(shù)又返回值的Lambda表達式

二.系統(tǒng)自帶委托 Action Func的Lambda

  1. Action 無返回值類型
class MyLamda
{
    public static void Show()
    { 
         //一個系統(tǒng)自定義的委托
        Action act1 = () => { Console.WriteLine("act1"); }; //無參 無返 lamda
        act1();

        //最多可以接受 16個參數(shù) 的委托 础嫡,有參 無返
        Action<string, int> act2 = (x, y) => { Console.WriteLine(x + "+" + y); };
        act2("a", 5);
        Action<string, int> act3 = (x, y) =>  Console.WriteLine("x + y"); //去掉{} 但只能寫一句方法體
    }
}
     
  1. Func 有返回值類型
class MyLamda
{
    public static void Show()
    { 
        //無參 有返回值 如此 返回2 返回值為唯一的<>中的類型 詳情F12
        Func<int> fun1 = () => 2;
        Console.WriteLine(fun1()); //返回值為2

        //有參 有返回值 如此 返回“abc”  返回值為<>中最后一個輸入的類型  前三個為()中參數(shù)類型  最多16個參數(shù) 詳情F12
        Func<int,double,string,string> fun2 = (x,y,z) => "abc";
        Console.WriteLine(fun2(2, 2, "2")); //結果為 abc
    }
}
     

三.將函數(shù)當做參數(shù)傳遞

在開發(fā)中遇到需要將函數(shù)內(nèi)容 當做參數(shù)傳遞的 也可使用這種方法傳遞 借助委托的Lambda

class MyLamda
{
    public static void Show()
    { 
        ShowSomething4(() => { Console.WriteLine("ShowSomething4"); }); //Action

        ShowSomething4((x,y) => {return "ShowSomething4"; }); //Func
    }
    static void ShowSomething4(Action function)
    {
        function();
    }

    static void ShowSomething4(Func<int,int,string> function)
    {
        Console.WriteLine(function(5, 5));
    }
}
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市酝惧,隨后出現(xiàn)的幾起案子榴鼎,更是在濱河造成了極大的恐慌,老刑警劉巖晚唇,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巫财,死亡現(xiàn)場離奇詭異,居然都是意外死亡哩陕,警方通過查閱死者的電腦和手機翁涤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萌踱,“玉大人葵礼,你說我怎么就攤上這事〔⑼遥” “怎么了鸳粉?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長园担。 經(jīng)常有香客問我届谈,道長,這世上最難降的妖魔是什么弯汰? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任艰山,我火速辦了婚禮,結果婚禮上咏闪,老公的妹妹穿的比我還像新娘曙搬。我一直安慰自己,他們只是感情好鸽嫂,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布纵装。 她就那樣靜靜地躺著,像睡著了一般据某。 火紅的嫁衣襯著肌膚如雪橡娄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天癣籽,我揣著相機與錄音挽唉,去河邊找鬼滤祖。 笑死,一個胖子當著我的面吹牛瓶籽,可吹牛的內(nèi)容都是我干的匠童。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼棘劣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了楞遏?” 一聲冷哼從身側響起茬暇,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寡喝,沒想到半個月后糙俗,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡预鬓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年巧骚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片格二。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡劈彪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出顶猜,到底是詐尸還是另有隱情沧奴,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布长窄,位于F島的核電站滔吠,受9級特大地震影響,放射性物質發(fā)生泄漏挠日。R本人自食惡果不足惜疮绷,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嚣潜。 院中可真熱鬧冬骚,春花似錦、人聲如沸懂算。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽犯犁。三九已至属愤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間酸役,已是汗流浹背住诸。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工驾胆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贱呐。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓丧诺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親奄薇。 傳聞我的和親對象是個殘疾皇子驳阎,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容