【发布时间】:2009-06-10 09:10:37
【问题描述】:
我目前正在思考一些我无法理解的想法。
问题是我想使用一个 lambda 函数来实例化捕获的变量,并使用另一个 lambda 来访问该变量的属性。
由于实例化发生在 lambda 中,因此在我想在第二个 lambda 中使用它时,变量实际上并没有被实例化。这是一种鸡和蛋的问题。
我知道变量将在在第二个 lambda 中使用时被实例化,但编译器没有。
我的想法有什么可行的方法吗?下面是实际代码:
class Program
{
static void Main(string[] args)
{
SqlCommand cmd;
using (new DisposableComposite(
() => cmd = new SqlCommand(),
() => cmd.Connection)) // <- compiler error - variable not instantiated
{
// code
}
}
}
class DisposableComposite : IDisposable
{
private List<IDisposable> _disposables = new List<IDisposable>();
public DisposableComposite(params Func<IDisposable>[] disposableFuncs)
{
// ensure the code is actually executed
foreach (var func in disposableFuncs)
{
IDisposable obj = func.Invoke();
_disposables.Add(obj);
}
}
public void Dispose()
{
foreach (var disposable in _disposables)
{
disposable.Dispose();
}
}
}
【问题讨论】:
标签: c# lambda captured-variable