我目前在思考一些想法,我無法正確理解。捕獲的變量實例化問題
問題是我想用一個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