C# lambda表达式(=>)的简单运用
lambda表达式的作用是简化匿名函数的编写
匿名函数的作用是类库允许你传入一个你自己写的函数,实现代码功能的自定义。
比如说,一个排序代码如下
void Sort<T>(T[] arr)
{
for (int i = 0; i < arr.Count() - 1; i++)
{
for (int j = 0; j < arr.Count() - i; j++)
{
if (arr[i]比arr[i+1]大)
{
T temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
}
很明显,这个排序算法所有地方都很好写,唯一难写的就是“arr[i]比arr[i+1]大”;因为按照什么规则排序,不同人有不同的需求,不同的T有不同的实现方法。类库不能自己实现,也不能穷尽所有可能,那么为了让sort代码通用,必须在这个位置上“插入”由调用者提供的代码。
这时候,匿名委托,或者lambda就有用了。我们可以这么实现
void Sort<T>(T[] arr, Func<T,T,int> comp)
{
for (int i = 0; i < arr.Count() - 1; i++)
{
for (int j = 0; j < arr.Count() - i; j++)
{
//调用匿名委托,我们约定,如果相等,返回0,前者大于后者,返回>0的整数。
if (comp(arr[i],arr[i+1]) > 0)
{
T temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
}
然后这样调用:
class User
{
public string Name;
public int Age;
}
User[] users = { ... };
// 这样就实现了按照年龄排序
Sort(users, (u1, u2) => u1.Age - u2.Age);
// 这样就实现了按照姓名排序
Sort(users, (u1, u2) => u1.Name.CompareTo(u2.Name));
// 这样就实现了先按照年龄排序,如果年龄相同,再按照姓名排序
Sort(users,(u1, u2)=>u1.Age==u2.Age?u1.Name.CompareTo(u2.Name):u1.Age - u2.Age);
/原文来自CSDN8#