是否可以在表达式中声明并运行lambda函数?

问题描述 投票:-1回答:2

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

var x = new Thing(); 

我当时在想,您能否将new Thing封装为类似于() => new Thing()内联的lambda,大致如下:

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

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

但是当我尝试时:

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

这也不会以错误的“预期方法名称”进行编译。

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

(注意:这是关于理解语言的问题,我不是问这样做是不是一个好主意,只有在我可以的情况下)

c# visual-studio-2017
2个回答
1
投票
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())

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

-3
投票
但是这也不起作用:
© www.soinside.com 2019 - 2024. All rights reserved.