拉姆达表达式(Lambda Expressions)[通俗易懂]

拉姆达表达式(Lambda Expressions)[通俗易懂]让我们先看一个简单的拉姆达表达式 x x 2 这个表达式的意思是 x 为参数 对 x 进行相应的操作后的结果作为返回值 通过这个拉姆达表达式 我们可以看到 这个表达式没有任何类型信息 但这并不代表拉姆达表达式是和类型无关的 在实际运用上 编译器会根据表达式的上下文判断上述 x 的类型及返回值的类型 例如 using System using System Linq

让我们先看一个简单的拉姆达表达式:

x=>x/2

这个表达式的意思是:x为参数,对x进行相应的操作后的结果作为返回值。

通过这个拉姆达表达式,我们可以看到:

这个表达式没有任何类型信息,但这并不代表拉姆达表达式是和类型无关的。在实际运用上,编译器会根据表达式的上下文判断上述x的类型及返回值的类型。例如:

using System;
using System.Linq;
public class LambdaTest
{

static void Main() {

Func expr = x => x / 2;
int someNumber = 9;
Console.WriteLine( “Result: {0}”, expr(someNumber) );
}
}

上述代码中,加粗部分为拉姆达表达式。Func<>为 delegate System.Func

上述运行结果为:Result:4

根据我们学习的数学知识,9/2应当结果是4.5,为什么上述结果会是4而不是4.5呢?是因为x是整型,x/2的结果也是整型,虽然在上述我们拉姆达表达式中,我们指明结果是double,但x/2这个表达式,由于x是整型,故计算出来的结果已被截掉小数,然后再转换为double,故结果是4,而不是4.5

要使结果是4.5,则只需定义上述相关语句为 Func expr = x => x / 2 即可。

无参数的拉姆达表达式:

using System;
using System.Linq;
public class LambdaTest
{

static void Main() {

int counter = 0;
WriteStream( () => counter++ );
Console.WriteLine( “Final value of counter: {0}”,counter );

}
static void WriteStream( Func counter ) {

for( int i = 0; i < 10; ++i ) {

Console.Write( “{0}, “, counter() );
}
Console.WriteLine();
}
}

编程小号
上一篇 2025-02-19 22:21
下一篇 2025-03-20 13:33

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/114895.html