1. 程式人生 > >C#lambda表示式和匿名函式

C#lambda表示式和匿名函式

lambda表示式也被稱為匿名函式,何為匿名函式?

匿名沒有真實名字,當然在C#中就是沒有函式名了,C#裡有兩種匿名函式的寫法,一種是早期推出的匿名函式,而另一種就是拉姆達(lambda)表示式了,那麼這兩種有什麼不同,分別怎麼用的,下面介紹一下.

我個人覺得吧,在寫程式碼的過程中,給函式 欄位命名的時候名字總是要想很久,甚至有時候不知道用什麼名字好,所以可能是MS明白了這部分人的感受所以推出匿名吧.也不用想名字(一頓胡亂分析).

匿名函式(需用到委託):

有這樣一段程式碼(求兩個數的和,普通寫法):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        delegate int MyDelegate(int a, int b);
        static void Main(string[] args)
        {
            MyDelegate md = add;
            int sum = md(1,2);
            Console.WriteLine(sum);
        }
        static int add(int a, int b)
        {
            return a + b;
        }
    }
}

匿名函式的寫法:

namespace ConsoleApplication1
{
    class Program
    {
        delegate int MyDelegate(int a, int b);
        static void Main(string[] args)
        {
            MyDelegate md = delegate(int a, int b) { return a + b; };
            int sum = md(1,2);
            Console.WriteLine(sum);
        }
    }
}

這樣寫的好處是 意思簡潔明瞭,且不用重新寫一個函式,(如果說函式內部很複雜建議不要用匿名函式)

匿名函式的格式: delegate(引數列表){ //方法體 };

lambda表示式(又稱匿名函式):

lambda是個名字.但是表示式需要注意,表示式!!不是函式,也就是說和函式沒啥關係,是匿名函式的一個進化版,所以又稱為匿名函式.

我們看一看他的寫法:

namespace ConsoleApplication1
{
    class Program
    {
        delegate int MyDelegate(int a, int b);
        static void Main(string[] args)
        {
            MyDelegate md = (a,b)=>{return a+b;};
            int sum = md(1, 2);
            Console.WriteLine(sum);
        }
    }
}

比匿名函式更為簡潔,連資料型別都不用寫 

labmda表示式的語法:(引數列表 ,可以省略型別名,如果只有一個引數 括號也可以省略){//方法體};

總結:

優點:

程式碼短小的時候可讀性好

能使用函式內部的定義的變數,而無需定義的全域性或者傳值

編輯效能好

缺點:

內部程式碼不宜過長,會導致讀取困難

當這玩意巢狀的時候........扎心了老鐵..

就和正則表示式一樣,雖然好用,但是不宜過長,不然很難讀取.