C# Lambda表达式
来源:互联网 发布:什么是ai设计软件 编辑:程序博客网 时间:2024/05/29 17:49
本篇我们来讨论C#中的Lambda表达式。本篇会使用上一篇文章:C#委托中的Person类,代码如下
public delegate void MyDelegate();public class Person{ public string Name { get; set; } public int Age { get; set; } public void ZhuangBi(MyDelegate findTopic, MyDelegate findPerson) { //首先,找到话题 findTopic(); //然后,找到一个能够聊天的人 findPerson(); Console.WriteLine("I am newbility"); }}class Program{ static void Main(string[] args) { Person p = new Person(); MyDelegate delegate_FindTopic = FindTopic; MyDelegate delegate_FindPersonToTalk = FindPersonToTalk; p.ZhuangBi(delegate_FindTopic, delegate_FindPersonToTalk); } static void FindTopic() { Console.WriteLine("MongoDB is not too bad"); } static void FindPersonToTalk() { Console.WriteLine("find a geek"); }}
我们现在思考这样一个问题啊,我这个人有强迫症,我觉得我在Program这个类中定义的两个方法FindTopic和FindPersonToTalk的功能都这么简单,能不能在调用Person.ZhuangBi这个方法时更加简化呢?
我们可以使用Lambda表达式。Lambda表达式本质上是一个匿名方法,顾名思义,匿名方法也是方法,只不过是没有方法名。可是,没有方法名怎么调用它呢?我们可以使用委托来调用它。
让我们使用Lambda表达式来改造一下我们的Program类
class Program{ static void Main(string[] args) { Person p = new Person(); MyDelegate delegate_FindTopic = () => { Console.WriteLine("MongoDB is not too bad"); }; MyDelegate delegate_FindPersonToTalk = () => Console.WriteLine("find a geek"); p.ZhuangBi(delegate_FindTopic, delegate_FindPersonToTalk); }}
这样子写的好处是,我就不需要再为这两个简单的功能专门写两个方法了。如果你把代码复制到本地编译运行一下,结果是可以正常输出的。如果现在看不懂的话没关系,下面我们会介绍Lambda表达式的语法,看完语法后再来看这段代码,你也许就明白了。
下面我们来讲一些关于Lambda表达式的语法问题
Lambda表达式最基本的形式是
(input parameters) => expression(input parameters) => {}
我们上面说Lambda表达式本质上是一个方法,所以它就包含参数列表和返回值。上面的两种形式,第一种的箭头后面是一个表达式,第二种的后面是一个代码段。如果有返回值的话,第一种的表达式就是返回值,而第二种的返回值会在语句段中使用return关键字指定,跟一般的方法一样。例如,我们定义两个个Lambda表达式,都实现两个整数相加
Func<int, int, int> myFunc1 = (int a, int b) => a + b;Func<int, int, int> myFunc2 = (int a, int b) => { return a + b; };
Func< int, int, int>是系统定义的泛型委托,第一个泛型参数int是返回值,后面两个泛型参数int是参数列表。
仅当 lambda 只有一个输入参数时,括号才是可选的;否则括号是必需的。 括号内的两个或更多输入参数使用逗号加以分隔。下面我们定义一个Lambda表达式,求一个整数的平方,下面这几种写法都可以
Func<int, int> myFunc3 = x => x * x ;Func<int, int> myFunc4 = (x) => { return x * x; };Func<int, int> myFunc5 = (int x) => { return x * x; };Func<int, int> myFunc6 = x => { return x * x; };
参数是int型的x,返回值是 x*x。由于我们的委托类型Func< int, int>已经指定了方法的参数类型和返回值类型,所以,在Lambda表达式中,参数的类型可以省略。
Lambda表达式一般都跟委托一起使用。在Linq中也比较常用。
- C# Lambda 表达式
- C# Lambda 表达式
- C#的Lambda表达式
- C# Lambda 表达式
- C# Lambda 表达式
- C#3.0 lambda表达式
- C# Lambda表达式
- C# Lambda表达式
- C# Lambda表达式
- C#中Lambda表达式
- C# 中Lambda表达式
- C# Lambda 表达式
- c#的Lambda表达式
- C#中的Lambda表达式
- C# Lambda表达式
- C#的Lambda 表达式
- C# Lambda表达式理解
- C#中Lambda表达式
- nvl函数判参数为空时用双引号替换的代码实现
- iOS中设置导航栏标题的字体颜色和大小
- JS数组方法汇总 array数组元素的添加和删除
- WPF 学习资源收集
- java InputStream读取数据问题
- C# Lambda表达式
- 查询表空间以及删除表空间
- Android中Context详解 ---- 你所不知道的Context
- Excel Sheet Column Title
- C#结构体和字节数组的转换函数
- 【深入JAVA】正则匹配
- android 禁止屏幕转向
- Markdown 学习资源整理
- 116:Populating Next Right Pointers in Each Node【树】【DFS】