给出一个非常简单的表达式,例如:
var x = new Thing();
我当时在想,您能否将new Thing
封装为类似于() => new Thing()
内联的lambda,大致如下:
var x = () => new Thing();
这不会编译,因为我试图将委托分配给x,而不是调用它的结果。
但是当我尝试时:
var x = (() => new Thing())(); //call my lambda in-line
这也不会以错误的“预期方法名称”进行编译。
所以这意味着我不能声明和使用lambda内联,或者只是我不理解语法?
(注意:这是关于理解语言的问题,我不是问这样做是不是一个好主意,只有在我可以的情况下)
using
给您围绕IDisposable
对象的边界。一旦离开该边界,该对象将被破坏。例如,采取这一行
using (var connection = new SqlConnection(connectionString))
[SqlConnection
实现IDisposable
,因此一旦到达using
块的末尾,就调用处置方法。现在让我们看一下带有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())
但是,我不确定您为什么要这样做。
但是这也不起作用: