匿名方法
class Program
{
static int Test1(int arg1, int arg2)
{
return arg1 + arg2;
}
static void Main(string[] args)
{
Func<int, int, int> plus = Test1;
//匿名方法形式
//一般用於回調
//本質上還一個方法,只是沒有名字,任何使用委託變量的地方都可以使用匿名方法賦值
Func<int, int, int> plus1 = delegate (int arg1, int arg2)
{
return arg1 + arg2;
};
}
}
lamabda表達式
class Program
{
static void Main(string[] args)
{
//Func<int, int, int> plus1 = delegate (int arg1, int arg2)
//{
// return arg1 + arg2;
//};
//lambda表達式用來代替匿名方法,所以一個lambda表達式也是定義了一個方法
//lambda表達式的參數是不需要聲明類型的
Func<int, int, int> plus1 = (int arg1, int arg2)=>
{
return arg1 + arg2;
};
//lambda表示的參數只有一個的時候,可以不加上括號,當函數體的語句只有一句的時候,我們可以不加上大括號,也可以不加上Return語句
//如果lambda表達式的失信代碼中需要多條語句,就必須添加花括號和return語句
Func<int, int> plus2 = a => a+1;
Func<int, int> plus3 = a =>
{
return a + 1;
};
Console.WriteLine(plus1(90, 60));
Console.WriteLine(plus2(90));
Console.WriteLine(plus3(90));
Console.ReadKey();
//通過lambda表達式可以訪問lambda表達式塊外部的變量。這是一個非常好的功能,但是如果不能正確使用也會很危險。
int somVal = 5;
Func<int, int> f = x => x + somVal;
Console.WriteLine(f(3)); //結果是8
somVal = 7;
Console.WriteLine(f(3)); //結果是10
//這個方法的結果,不但受到參數的控制,還收到somVal變量的控制,結果不可控,容易出現編程問題,用的時候要謹慎。
}
}