lambda表达式
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
使用 Lambda 表达式可以使代码变的更加简洁紧凑。
但是对于对Lambda表达式了解不够的程序员来说,理解和调试会有些困难。
简化演变
namespace lambda表达式
{
class Program
{
static void Main(string[] args)
{
//匿名委托;
Action<int> a1 = delegate (int i) { Console.WriteLine(i); };
a1(3);
//lambda表达式格式的匿名方法的写法
Action<int> a2 = (int i) => { Console.WriteLine(i); };
a2(666);
//如果有一个参数可以不写参数的小括号
Action<int> a3 = i => { Console.WriteLine(i); };
a3(666);
//lambda表达式的目的就是减少代码
Func<string, int, bool> f1 = delegate (string s, int i) { return true; };
Func<string, int, bool> f2 = (string s, int i) => { return true; };
Func<string, int, bool> f3 = (s, i) => { return true; };
Func<string, int, bool> f4 = (s, i) => true;//如果方法有返回值,并且只有一行,可以连方法体的{}和return都省略掉
Console.ReadKey();
}
}
}
GetMax实例
namespace lambda表达式GetMax改造
{
class Program
{
static void Main(string[] args)
{
int[] nums = new int[] { 3, 88, 5, 9 };
//int m = GetMax(nums, compareInt);
//未简化
//Func<int, int, bool> f = delegate(int i1,int i2){ return i1> i2; };
//int m = GetMax(nums, f);
//简化后
int m = GetMax(nums, (i1,i2)=> i1 > i2 );
Console.WriteLine(m);
Console.ReadKey();
}
//static bool compareInt(int i1, int i2)
//{
// return i1 > i2;
//}
static T GetMax<T>(T[] objs,Func<T,T,bool> compareFunc)
{
T max = objs[0];
for (int i = 0; i < objs.Length; i++)
{
if (compareFunc(objs[i],max))
{
max = objs[i];
}
}
return max;
}
}
}