C# lambda表达式(=>)

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#

推荐阅读更多精彩内容