博客
关于我
神奇的lambda
阅读量:463 次
发布时间:2019-03-06

本文共 1348 字,大约阅读时间需要 4 分钟。

Lambda表达式是一个强大的工具,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。在C#中,Lambda表达式通过Lambda运算符(=>)定义,左边是输入参数,右边是表达式或语句块。例如,Lambda表达式x => x * x可以读作“x goes to x times x”。

Lambda表达式的基本用法

Lambda表达式可以分配给委托类型。例如:

delegate int del(int i);del myDelegate = x => x * x;int j = myDelegate(5); // j = 25

在这种情况下,Lambda表达式的输入参数和返回值类型与委托的定义一致。编译器会根据上下文推断输入参数和返回值的类型。

创建表达式目录树类型

在某些情况下,Lambda表达式可以用于创建表达式目录树。例如:

using System.Linq.Expressions;Expression
> expr = x => x * x;

这种方式可以在基于方法的LINQ查询中使用,作为标准查询运算符(如Where)的参数。例如:

var numbers = new[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };int oddCount = numbers.Count(n => n % 2 == 1); // 返回25

Lambda表达式的类型推理

Lambda表达式通常不需要显式指定类型,因为编译器可以根据上下文推断输入参数和返回值的类型。例如:

Func
myFunc = n => n == 5;bool result = myFunc(5); // 返回false

如果需要显式指定类型,可以在输入参数括号中添加类型信息:

Func
myFunc = (int n) => n == 5;

Lambda表达式的限制

  • Lambda表达式的参数数量必须与委托类型的参数数量一致。
  • Lambda表达式的输入参数和返回值必须能够隐式转换为委托的定义。
  • Lambda表达式通常用于标准查询运算符的参数,例如Where、Select等。

示例代码

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };int oddNumbers = numbers.Count(n => n % 2 == 1); // 返回25var firstNumbersLessThan6 = numbers.TakeWhile(n => n < 6);var firstSmallNumbers = numbers.TakeWhile((n, index) => n >= index);

Lambda表达式的最佳实践

  • 在编写Lambda表达式时,尽量减少显式类型声明,依赖编译器的类型推理能力。
  • 如果需要多个输入参数,可以通过括号将参数列表明确化。
  • 在基于方法的LINQ查询中,Lambda表达式通常用于标准查询运算符的参数,例如Where和Select。

通过合理使用Lambda表达式,可以简化代码,使其更易于阅读和维护。

转载地址:http://ltvkz.baihongyu.com/

你可能感兴趣的文章
pandas的to_sql方法中使用if_exists=‘replace‘
查看>>
Springboot ppt转pdf——aspose方式
查看>>
pandas读取parquet报错
查看>>
pandas读取数据用来深度学习
查看>>
Pandas进阶大神!从0到100你只差这篇文章!
查看>>
spring5-介绍Spring框架
查看>>
pandas,python - 如何在时间序列中选择特定时间
查看>>
Spring 框架之 AOP 原理深度剖析
查看>>
Pandas:如何按列元素的组合分组,以指示基于不同列的值的同现?
查看>>
Pandas:将一列与数据帧的所有其他列进行比较
查看>>
PANDA:基于多列对数据表的行运行计算,并将输出存储在新列中
查看>>
PandoraFMS 监控软件 SQL注入漏洞复现
查看>>
PandoraFMS 监控软件 任意文件上传漏洞复现
查看>>
Papyrus项目常见问题解决方案
查看>>
Parallel.ForEach使用示例
查看>>
Parallel.ForEach的基础使用
查看>>
parallels desktop for mac安装虚拟机 之parallelsdesktop密钥 以及 parallels desktop安装win10的办公推荐可以提高办公效率...
查看>>
parallelStream导致LinkedList遍历时空指针的问题
查看>>
Parameter ‘password‘ not found. Available parameters are [md5String, param1, username, param2]
查看>>
ParameterizedThreadStart task
查看>>