私は現在、私が正しく理解できないいくつかのアイデアについて考えています。
問題は、1つのラムダ関数を使用してキャプチャされた変数をインスタンス化し、別のラムダを使用してその変数のプロパティにアクセスしたいということです。
インスタンス化はラムダ内で行われるため、変数は実際には2番目のラムダ内で使用したい時間にインスタンス化されません。これは一種の鶏が先か卵が先かという問題です。
変数は2番目のラムダで使用されるときにインスタンス化されることは知っていますが、コンパイラーはインスタンス化されません。
私のアイデアがうまくいく方法はありますか?実際のコードは次のとおりです。
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();
}
}
}