繁体   English   中英

是否可以在表达式中声明和运行 lambda function ?

[英]Is it possible to declare and run a lambda function in an expression?

给定一个非常简单的表达式,例如:

var x = new Thing(); 

我在想,你能否将new Thing封装为 lambda 像() => new Thing()内联,大致如下:

var x = () => new Thing();

这不会编译,因为我试图将委托分配给 x,而不是调用它的结果。

但是当我尝试时:

var x = (() => new Thing())(); //call my lambda in-line

这也不会与错误“预期方法名称”一起编译。

那么这是否意味着我不能声明和使用 lambda 内联,或者只是我不理解语法?

(注意:这是一个关于理解语言的问题,我不是在问这样做是否是一个好主意,只有在我可以的情况下。我的例子显然过于简化了任何现实世界的使用!)

using为您提供IDisposable对象周围的边界。 一旦离开该边界,object 就会被破坏。

例如,采取这条线

using (var connection = new SqlConnection(connectionString))

SqlConnection实现IDisposable ,因此一旦到达using块的末尾,就会调用 disposable 方法。

现在让我们看看你的例子 lambda -

using (var conn = (() => new SqlConnection(ConnectionString)))

在这种情况下,您的变量conn不是一个连接,而是一个匿名方法,当然不会实现IDisposable 匿名方法的类型取决于初始化表达式,而您没有其中之一。 稍后会详细介绍。

对于你的第二个例子,

using (var conn = (() => new SqlConnection(ConnectionString))())

这是我开始对你想要完成的事情感到困惑的地方。 我不知道你打算如何不同于

using (var conn = new SqlConnection(ConnectionString))

如果您绝对必须这样做,您可能需要将它包装在Func

using (var conn = new Func<SqlConnection>(() => new SqlConnection(ConnectionString)).Invoke())

但是,同样,我不确定你为什么要这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM