技术图文:匿名方法是怎样演变为Lambda表达试的?

背景

“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda 表达式基于数学中的 λ演算得名,直接对应于其中的 lambda 抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda 表达式可以表示闭包(注意和数学传统意义上的不同)。


技术分析

下面代码演示怎么从一个匿名函数(方法) 推导出一个Lambda表达式。

Step1. 通过一个匿名方法来创建委托实例,传入一个方法作为变量

public string Upper(string str)
{
    return str.ToUpper();
}

public void Test()
{
    //定义一个委托实例,输入参数和返回值都是string类型。
    Func<string, string> funcToUpper = Upper;
    string result= funcToUpper("lsgo");
    Console.WriteLine(result);
}

Step2. Upper可以转化一个匿名方法

针对方法体只有一行或者几行的,为了方便代码可阅读性,不建议单独维护一个方法,只需做一个匿名方法既可以。

public void Test()
{
    //定义一个委托实例,输入参数和返回值都是string类型。
    Func<string, string> funcToUpper = delegate(string str)
    {
        return str.ToUpper();
    };
    string result = funcToUpper("lsgo");
    Console.WriteLine(result);
}

Step3. 利用 C#3.0语法中出现的 “=>”(goes to)语法糖

“=>” 可以替换匿名方法,该语法就是Lambda 表达式。

public void Test()
{
    //定义一个委托实例,输入参数和返回值都是string类型。
    Func<string, string> funcToUpper = (string str)=>
    {
        return str.ToUpper();
    };
    string result = funcToUpper("lsgo");
    Console.WriteLine(result);
}

到第三步为止 Lambda 表达式其实看起来和匿名方法一样,然并没有节省多大空间,或并没有增加代码的可读性,下面讲一下 Lambda 表达式的快捷语法。

Step4. 省略参数类型

第一个快捷语法:以省略参数类型,因为定义委托的时候已经设置好了参数类型,它可以自动推算参数类型,且当只有一个参数的时候可以去掉小括号。

public void Test()
{
    //定义一个委托实例,输入参数和返回值都是string类型。
    Func<string, string> funcToUpper = str =>
    {
        return str.ToUpper();
    };
    string result = funcToUpper("lsgo");
    Console.WriteLine(result);
}

Step5. 省略 return

第二个快捷语法:当方法体只有一行时可以去掉大括号,且如果有返回值可以去掉 return。

public void Test()
{
    //定义一个委托实例,输入参数和返回值都是string类型。
    Func funcToUpper = str => str.ToUpper();
    string result = funcToUpper("lsgo");
    Console.WriteLine(result);
}

总结

上面五个步骤详细地介绍了从匿名方法到 Lambda 表达式完整的演变过程。希望对大家熟悉Lambda表达式有所启发。今天就到这里吧!See You!


相关图文

  • 如何利用 C# 实现 K 最邻近算法?
  • 如何利用 C# 实现 K-D Tree 结构?
  • 如何利用 C# + KDTree 实现 K 最邻近算法?
  • 如何利用 C# 对神经网络模型进行抽象?
  • 如何利用 C# 实现神经网络的感知器模型?
  • 如何利用 C# 实现 Delta 学习规则?
  • 如何利用 C# 爬取带 Token 验证的网站数据?
  • 如何利用 C# 向 Access 数据库插入大量数据?
  • 如何利用 C# 开发「桌面版百度翻译」软件!
  • 如何利用 C# 开发「股票数据分析软件」(上)
  • 如何利用 C# 开发「股票数据分析软件」(中)
  • 如何利用 C# 开发「股票数据分析软件」(下)
  • 如何利用 C# 爬取「财报说」中的股票数据?
  • 如何利用 C# 爬取 One 持有者返利数据!
  • 如何利用 C# 爬取Gate.io交易所的公告!
  • 如何利用 C# 爬取BigOne交易所的公告!
  • 如何利用 C# 爬取 ONE 的交易数据?
  • 如何利用 C# 爬取「京东 - 计算机与互联网图书销量榜」!
  • 如何利用 C# 爬取「当当 - 计算机与互联网图书销量榜」!
  • 如何利用 C# 爬取「互动出版网 - 计算机图书销量榜」!
  • 如何利用 C# 爬取「中国图书网 - 计算机与互联网图书销量榜」!
  • 如何利用 C# 爬取「猫眼电影:热映口碑榜」及对应影片信息!
  • 如何利用 C# 爬取「猫眼电影专业版:票房」数据!
  • 如何利用 C# 爬取「猫眼电影:最受期待榜」及对应影片信息!
  • 如何利用 C# 爬取「猫眼电影:国内票房榜」及对应影片信息!
  • 如何利用 C# + Python 破解猫眼电影的反爬虫机制?
  • 如何利用BigOne的API制作自动化交易系统 – 身份验证
  • 如何利用BigOne的API制作自动化交易系统 – 获取账户资产

你可能感兴趣的:(C#学习)