生活随笔
收集整理的這篇文章主要介紹了
匿名方法和Lambda表达式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一:匿名方法:
《1》:定義:
匿名方法(Anonymous methods) 提供了一種傳遞代碼塊作為委托參數的技術。匿名方法是沒有名稱只有主體的方法。
在匿名方法中您不需要指定返回類型,它是從方法主體內的return語句推斷的。
《2》:匿名方法的使用:
匿名方法是通過使用delegate關鍵字創建委托實例來聲明的。
無返回值無參的方法:
class Program{delegate void Del(); //先定義一個無返回值無參數的委托static void Main(string[] args){Del del = delegate () //無返回值無參數的匿名方法{Console.WriteLine("你長得真好看");};del();Console.ReadLine();}}
無返回值有參的方法:
class Program{delegate void Delet(string str, int i); //定義一個無返回值有參數的委托static void Main(string[] args){ Delet delet = delegate (string str,int i) //無返回值有參數的匿名方法{Console.WriteLine(str + "的年齡是:" + i);};delet("王五",30);Console.ReadLine();}}
有返回值有參的方法:
class Program{delegate string Dele(string str,int i); //定義一個有返回值有參數的委托static void Main(string[] args){Dele dele = delegate (string str,int i) //有返回值類型的匿名方法{return str + "的年齡是:" + i;};Console.WriteLine(dele("小張",20)); Console.ReadLine();}}
系統委托匿名函數
Console.WriteLine(dele("小張",20));Action<string, int> action = delegate (string str,int i) //無返回值有參數的匿名方法{Console.WriteLine(str + "的年齡是:" + i);};action("小明", 20);
Func<string, int, string> func = delegate (string str,int i) //有返回值有參數的匿名方法{return str + "的年齡是:" + i;};Console.WriteLine(func("小麗",27));
《3》:作用
可以使用匿名函數來初始化命名委托[無需取名字的委托],或傳遞命名委托(而不是命名委托類型,傳遞一個方法塊,而不是委托類型)[callback的方式]作為方法參數。
二.Lambda表達式
《1》:定義:
Lambda表達式是一種可用于創建委托或表達式目錄樹類型的匿名函數。通過使用lambda表達式,可以寫入可作為參數傳遞或作為函數調用值返回的本地函數。
從C#3.0開始,可以使用Lambda表達式代替匿名方法。只要有委托參數類型的地方就可以使用Lambda表達式
《2》:聲明:
Lambda運算符“=>”的左邊列出了需要的參數,如果是一個參數可以直接寫a=>(參數名自己定義),如果多個參數就使用括號括起來,參數之間以逗號間隔
static void Main(string[] args){Action action = () => //無返回值無參數的匿名方法的表達式{Console.WriteLine("你長得真好看");};action();Action<string> action1 = (str) => //無返回值有參數的匿名方法的表達式{Console.WriteLine(str+"你好");};action1("小明");Action<string, int> action2 = (str, i) => {Console.WriteLine(str + "的年齡是:" + i);};action2("王麻子",30);Func< int, string,string> func = (i,str) => //有返回值有參數的匿名方法的表達式{return str + "的年齡是:" + i;};Console.WriteLine(func(20,"張三"));Console.ReadLine();}
(1):如果Lambda表達式只有一條語句,在方法快內就不需要大括號和return語句,編譯器會自動添加return語句,如果Lambda表達式的實現代碼中需要多條語句,就必須添加大括號和return語句。
Action<string, int> atc2 = (str, i) => Console.WriteLine(str + "今年" + i + "歲");atc2("小明", 12);Func<int, string> fun = i => "輸入的數字是" + i;Console.WriteLine(fun(100));
(2):通過Lambda表達式可以訪問Lambda表達式塊外部的變量。這是一個非常好的功能,但如果不能正確使用,也會非常危險。
int somVal = 5;Func<int,int> f = x=>x+somVal;Console.WriteLine(f(3));//8somVal = 7;Console.WriteLine(f(3));//10
(3):這個方法的結果,不但受到參數的控制,還受到somVal變量的控制,結果不可控,容易出現編程問題,用的時候要謹慎
《3》:表達式的作用:
1.Lambda表達式是一種匿名方法。匿名方法可省略參數列表,Lambda表達式不能省略參數列表的圓括號()
2.發展:委托 → 匿名方法 → lambda表達式 → 泛型委托 → 表達式樹
總結
以上是生活随笔為你收集整理的匿名方法和Lambda表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。