微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Lambda表达式在C#闭包中吗?

如何解决Lambda表达式在C#闭包中吗?

Lambda可以使用闭包来实现,但它本身不一定是闭包。

一个封闭是“与该函数的非局部变量引用环境中共同发挥作用。”

当您使用在方法外部定义的变量制作lambda表达式时,必须使用闭包来实现lambda。例如:

int i = 42;

Action lambda = () => { Console.WriteLine(i); };

在这种情况下,编译器生成方法必须有权访问i在完全不同的范围内定义的变量()。为了使它起作用,它生成方法是“将函数与引用环境一起使用”-基本上,它是在创建“闭包”以检索对变量的访问。

但是,此lambda:

Action lambda2 = () => { Console.WriteLine("Foo"); }

因为它是完全包含的方法,所以它不依赖任何“引用环境”。在这种情况下,编译器将生成普通的静态方法,并且根本不涉及任何闭包。

在这两种情况下,lambda都会创建一个delegate(“函数对象”),但在第一种情况下它只是创建一个闭包,因为lambda不一定在所有情况下都必须“捕获”引用环境。

解决方法

Lambda表达式(某种程度上是匿名函数)是否闭包?

我对闭包的理解是,它们是被视为对象的函数,这似乎可以准确表示匿名函数和Lambda表达式的作用。

称它们为闭包是否正确?我知道闭包是由于lisp方言而产生的(或变得很流行),但这也是通用的编程术语吗?

感谢您提供的任何澄清!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。