C#lambda表示式和匿名函式
阿新 • • 發佈:2019-01-22
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表示式的語法:(引數列表 ,可以省略型別名,如果只有一個引數 括號也可以省略){//方法體};
總結:
優點:
程式碼短小的時候可讀性好
能使用函式內部的定義的變數,而無需定義的全域性或者傳值
編輯效能好
缺點:
內部程式碼不宜過長,會導致讀取困難
當這玩意巢狀的時候........扎心了老鐵..
就和正則表示式一樣,雖然好用,但是不宜過長,不然很難讀取.