我目前在思考一些想法,我无法正确理解。捕获的变量实例化问题
问题是我想用一个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();
}
}
}
该死的..那是一件容易的事。我想我需要另一杯咖啡。 :) – VVS 2009-06-10 09:22:30