using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Learn
{
public delegate void NoReturnNopara();//1、聲明委託
public delegate void NoReturnWithPara(string name, DateTime now);
public delegate string WithReturnNoPara();
public delegate int WithReturnWithPara(int x, int y);
class lambdaShowcs
{
public static void Show()
{
NoReturnWithPara method = new NoReturnWithPara(Study);//實例化委託
method.Invoke("我愛西南", DateTime.Now);
NoReturnWithPara method1 = new NoReturnWithPara(
delegate(string name, DateTime now)
{
Console.WriteLine("{0}{1}正在學習lambda表達式", name, now);
});//匿名方法、去掉方法
method1.Invoke("我愛西南", DateTime.Now);
NoReturnWithPara method2 = new NoReturnWithPara(
(string name, DateTime now)=>
{
Console.WriteLine("{0}{1}正在學習lambda表達式", name, now);
});//lambda表達式,吧delegate換成=> 箭頭左邊是參數列表,右邊是方法體
method2.Invoke("我愛西南", DateTime.Now);
//lambda表達式是什麼?
//lambda就是一個方法(匿名方法)、這是本質
//
//
NoReturnWithPara method3 = new NoReturnWithPara(
(name,now) =>
{
Console.WriteLine("{0}{1}正在學習lambda表達式", name, now);
});//去掉參數類型聲明、因爲實力話委託的傳入方法必須滿足委託的約束
method3.Invoke("我愛西南", DateTime.Now);
NoReturnWithPara method4=(name, now) =>
{
Console.WriteLine("{0}{1}正在學習lambda表達式", name, now);
};// 去掉new NoReturnWithPara
method4.Invoke("我愛西南", DateTime.Now);
NoReturnWithPara method5 = (name, now) =>
Console.WriteLine("{0}{1}正在學習lambda表達式", name, now);
// 去掉大括號,方法體只有行的時候纔可也去掉
method4.Invoke("我愛西南", DateTime.Now);
NoReturnWithPara method10 = (s, d) => Console.WriteLine("{0}{1}",s,d);//lamda表達式
method10.Invoke("我愛西南", DateTime.Now);
WithReturnWithPara fuc = (x, y) => { return x + y; };//待返回值的lambda
fuc.Invoke(1,2);//調用
//進一步優化、如果方法體只有只有一行,{}和retun都可也去掉
WithReturnWithPara fuc1 = (x, y) => x + y;
NoReturnNopara action = () => { };//表示無參數、方法體爲空
NoReturnNopara action1 = () => { Console.WriteLine("1231"); };
WithReturnNoPara fun2 = () => "返回值";//無參數返回值
//委託用action和Func關鍵字、無需在單獨聲明委託
Action act1 = () => { };
//一個參數可也去掉小括號
Action<string> act2 = s => { };//泛型委託,接受一個參數。無返回值
//最多可也有16個參數,不帶返回值
Action<string, long, int, DateTime, Action> act4 = (s, y, z, w,h) => { };
Func<string> fun1 = () => "dddd";//無參數帶返回值。返回值是字符串
Func<DateTime> func2 = () => DateTime.Now;
//接受三個參數,返回一個值。返回值爲action
Func<int, DateTime, string,Action> func3 = (q, w, z) => act1;
}
public static void LinqShow()
{
///lmbda的應用
List<int> intList = new List<int>();//定義一個int list集合
for (var i=0; i < 100; i++)
{
intList.Add(i);
}
foreach (int i in intList.Where(num => num > 55))
{
Console.WriteLine(i);
}
}
private static void Study(string name, DateTime now)
{
Console.WriteLine("{0}{1}正在學習lambda表達式",name,now);
}
}
}
C#進階之路-lambda表達式(筆記6)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.