Je suis actuellement en train de réfléchir à une idée que je ne peux pas comprendre.Problème d'instanciation de variable capturée
Le problème est que je veux utiliser une fonction lambda pour instancier une variable capturée et un autre lambda pour accéder à une propriété de cette variable. Puisque l'instanciation se produit dans le lambda, la variable n'est pas réellement instanciée au moment où je veux l'utiliser dans le second lambda. C'est un problème de poule et d'oeuf.
Je sais que la variable sera instanciée le temps qu'elle est utilisée dans le second lambda mais pas le compilateur.
Est-ce que mon idée pourrait fonctionner? Voici le code actuel:
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();
}
}
}
Damn .. c'était facile. Je suppose que j'ai besoin d'un autre café. :) – VVS