程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 初步熟悉C#中的Lambda表達式和匿名辦法

初步熟悉C#中的Lambda表達式和匿名辦法

編輯:C#入門知識

初步熟悉C#中的Lambda表達式和匿名辦法。本站提示廣大學習愛好者:(初步熟悉C#中的Lambda表達式和匿名辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是初步熟悉C#中的Lambda表達式和匿名辦法正文


寫在後面

除夕三天在家閒著無事,就看了看Linq的相干內容,也預備體系的進修一下,作為進修Linq的前奏,照樣先得說說Lambda與匿名辦法的常識點。也算是對常識點的查漏補缺吧,或許你會說這沒啥年夜不了的,項目中都在用,然則有些常識,你回頭在檢查的時刻,總會有那末點紛歧樣的收成,這點我是感同身受的,我看書有個習氣,一本書,我能看個三四遍,每次總會有收成。固然,你可以說,其時確定沒賣力看,不是那模樣的,我以為最直接的緣由在於,其時你看是看,沒有在真實的項目中碰到過,所以你心裡對它的懂得其實不深,假如在有那末點項目經歷了,在去翻看書中的實際常識,心裡總會有那種名頓開的感到。信不信由你,橫豎我是信了!

匿名辦法

匿名辦法望文生義,是沒著名字的辦法,然則仍無方法體,仍無能活。在許多處所能夠你都見過它,好比js中,用的最多!

看看Msdn給的說法:

在 2.0 之前的 C# 版本中,聲明拜托的獨一辦法是應用定名辦法。 C# 2.0 引入了匿名辦法,而在 C# 3.0 及更高版本中,Lambda 表達式代替了匿名辦法,作為編寫內聯代碼的首選方法。 不外,本主題中有關匿名辦法的信息異樣也實用於 Lambda 表達式。 有一種情形下,匿名辦法供給了 Lambda 表達式中所沒有的功效。 您可以使用匿名辦法來疏忽參數列表。 這意味著匿名辦法可轉換為具有各類簽名的拜托。 這關於 Lambda 表達式來講是弗成能的。



namespace Wolfy.LinqDemo
{
    /// <summary>
    /// 創立一個拜托Del
    /// </summary>
    /// <param name="x">參數</param>
    public delegate void Del(int x);
    class Program
    {
        static void Main(string[] args)
        {
            //應用匿名辦法創立一個拜托對象d
            Del d = delegate(int x)
            {
                Console.WriteLine(x);
            };
        }
    }
}

經由過程應用匿名辦法,因為您不用創立零丁的辦法,是以削減了實例化拜托所需的編碼體系開支。

例如,線程類便可創立一個線程而且包括該線程履行的代碼。


      Thread thread = new Thread(
       delegate()
       {
           //辦法體
           Console.WriteLine("Hello world");
       });

可以更直白的如許懂得,假如該辦法就應用那末一次,那末便可以應用匿名辦法。

Lambda

界說

Lambda 表達式是一種可用於創立拜托或表達式目次樹類型的匿名函數。

若要創立 Lambda 表達式,須要在 Lambda 運算符 => 左邊指定輸出參數(假如有),然後在另外一側輸出表達式或語句塊。

/// <summary>
    /// 創立一個拜托Del
    /// </summary>
    /// <param name="x">參數</param>
    public delegate void Del(int x);
    class Program
    {
        static void Main(string[] args)
        {
            Del del = x => Console.WriteLine(x * x);
            del(2);//4
            Console.Read();
        }
    }

若要創立表達式目次樹,可以如許:


/// <summary>
    /// 創立一個拜托Del
    /// </summary>
    /// <param name="x">參數</param>
    public delegate void Del(int x);
    class Program
    {
        static void Main(string[] args)
        {
            Del del = x => Console.WriteLine(x * x);
            del(2);//4
            System.Linq.Expressions.Expression<Del> expression = x => Console.WriteLine(x);
            Console.Read();
        }
    }

下面的例子創立了一個表達式目次樹對象expression,因為Del拜托是沒有前往值的,這裡是將其直接輸入。

表達式Lambda

表達式位於 => 運算符右邊的 lambda 表達式稱為“表達式 lambda”。表達式 lambda 會前往表達式的成果,並采取以下根本情勢:

(input parameters) => expression

  留意:僅當 lambda 只要一個輸出參數時,括號才是可選的;不然括號是必須的。 括號內的兩個或更多輸出參數應用逗號加以分隔:


(x, y) => x == y
//有時,編譯器難以或沒法揣摸輸出類型。 假如湧現這類情形,你可以按以下示例中所示方法顯式指定類型
(int x, string s) => s.Length > x
//應用空括號指定零個輸出參數
() => SomeMethod()

語句Lambda

語句 lambda 與表達式 lambda 表達式相似,只是語句括在年夜括號中

(input parameters) => {statement;}

statement(語句Lambda)可以包括隨意率性數目的語句,但平日不會多於兩個或三個。

一個例子


namespace Wolfy.LinqDemo
{
    /// <summary>
    /// 創立一個拜托Del
    /// </summary>
    /// <param name="x">參數</param>
    public delegate void Del(string strName);

    class Program
    {
        static void Main(string[] args)
        {
            Del d = x =>
            {
                string s = "Hello" + " " + x;
                Console.WriteLine(s);
            };
            d("wolfy");
            Console.Read();
        }
    }
}

留意

像匿名辦法一樣,語句 lambda 也不克不及用於創立表達式目次樹

總結

這裡對Lambda及匿名辦法做了一個簡略引見。固然在項目中也常常應用,然則對Lambda的基本常識,照樣須要補一補。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved