Я сейчас размышляю над идеей, которую не могу понять.
Проблема заключается в том, что я хочу использовать одну лямбда-функцию для создания экземпляра захваченной переменной, а другую лямбду - для доступа к свойству этой переменной.
Поскольку создание экземпляров происходит внутри лямбды, переменная фактически не создается, когда я хочу использовать ее во второй лямбде ... это своего рода проблема курицы и яйца.
Я знаю, что переменная будет инстанцирована, когда она будет использоваться во второй лямбде, но компилятор - нет.
Может ли моя идея сработать? Вот фактический код:
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();
}
}
}