[英]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.