web框架C#匿名方法和Lambda表达式

web框架中,匿名方法和Lambda表达式有相似的作用,但是也有有些差别。

匿名方法

匿名方法的出现

首先,我们需要考虑的第一个问题就是为什么会有匿名方法的出现?我们可能都会用,但是我们倒也可以思考一下其来源。我们可以看一下匿名方法(在web框架中)都会用到什么地方:委托和LINQ,这两个是主要会用到匿名方法的概念。像之前我门使用普通方法使用的好好的,那为什么要使用匿名方法呢?总的来说它有以下几点好处(可能不全面):
1、简化了代码的书写。以前总是要在方法体外面先定义好了方法,才能将方法赋给委托实例,现在可以在方法体内直接定义方法即可,降低了代码的复杂性。
2、避免了过多的颗粒过小的方法污染整个程序。有时我们可能会在类中定义了太多的简单的方法,这可能不会使整个程序怎么样,但这大大影响了我们对程序的可读性。
 

使用

匿名方法 提供了一种传递代码块作为委托参数的技术。匿名方法是没有名称只有主体的方法。

在匿名方法中不需要指定返回值类型,系统会在主体内的 return 语句推断。
            Calculate ai = delegate (int x, int y)
            {
                Console.WriteLine($"just a piece of cake: {x}/{y}={x/y}");
            };
            ai(8, 3);
特点:
找不到方法名。
由关键字delegate代替。
匿名方法不需要标志返回值类型(演示:略)。
另外:
外部方法不能使用匿名函数中的变量。
匿名方法能够使用(并改变)其外部方法的变量/参数,但标记为ref/out/in的引用传递参数除外。
匿名方法中不能出现break/continue/goto语句 。
即使左边的Delegate定义是有参数的,右边的匿名方法也可以不标记参数(方法体中当然也不能使用) 。
 

Lambda表达式 

在C#中我们可以将lambda表达式看做是对C#2.0中的匿名方法的一种演变。匿名方法可以做到的事情lambda表达式几乎都可以做到,而且lambda表达式更易读、更简洁。其实lambda表达式主要作用的对象主要是LINQ,对于委托过程的代码简化并不是很明显。Lambda表达式是不需要声明类型的。 

使用  

如果Lambda表达式只有一条语句,在方法体中就不需要大括号和return语句,编译器

会自动添加return语句。如果Lambda表达式的实现代码中需要多条语句,就必须添加大括号和return语句
将匿名方法的delegate去掉,使用箭头(=>)替代,就是Lambda表达式了。 
而且,为了便于Lambda表达式的传递,.NET为我们预置了两种委托:
Func:有返回值的方法。使用泛型参数依次表示方法参数,最后一个表示方法返回值。
Action:没有返回值的方法。使用泛型参数依次表示方法参数。
语法规则如下: 
            //标准(推荐)
            Action d = () => { Console.WriteLine("111"); };
            //一行方法体实现,可以不用{ }
            Action d = () => Console.WriteLine("222"); 
            d();

            //标准(推荐)
            Action<string> d = (x) => { Console.WriteLine(x + "欢迎您"); };
            //一个参数,可以不用()
            Action<string> d = x => Console.WriteLine(x + "欢迎您");
            d("11");

            Action<string, string> d = (x, y) => { Console.WriteLine(x + "欢迎您," + y); };
            d("11", "22");
lambda的语法规则基本等同于匿名方法,除了“omit parameter list”


标签: C#系列

网站&系统开发技术学习交流群:463167176

本站文章除注明转载外,均为本站原创或翻译,欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,共创和谐网络环境。
转载请注明:文章转载自:快速开发框架 » web框架C#匿名方法和Lambda表达式
本文标题:web框架C#匿名方法和Lambda表达式
本文地址:https://www.hocode.com/OrgTec/Back/0042.html

相关文章: 初识Web框架--C# Linq技术基础

电话
电话 18718672256

扫一扫
二维码