Disons que j'ai défini une classe MyDisposable : IDisposable
. Je sais que je peux fournir une liste codée en dur de IDisposable
objets à la déclaration using
:Existe-t-il un moyen d'avoir une instruction using avec des cibles créées dynamiquement?
using (MyDisposable firstDisposable = new MyDisposable(),
secondDisposable = new MyDisposable())
{
// do something
}
Maintenant, nous allons dire que j'ai quelques méthodes qui effectuent des opérations sur une collection de mes objets jetables, et je veux faire à l'intérieur d'une instruction using
. Il pourrait ressembler à ceci (mais cela ne fonctionne pas bien sûr parce que le bloc à l'aide attend un ou plusieurs objets IDisposable
et je passe un seul objet de collection):
using (var myDisposables = GetMyDisposables())
{
foreach (var myDisposable in myDisposables)
{
DoSomething(myDisposable);
DoSomethingElse(myDisposable);
}
}
Voici les autres méthodes, juste pour la clarté :
static List<MyDisposable> GetMyDisposables()
{
throw new NotImplementedException(); // return a list of MyDisposable objects
}
static void DoSomething(MyDisposable withMyDisposable)
{
// something
}
static void DoSomethingElse(MyDisposable withMyDisposable)
{
// something else
}
Est-il possible que je peux y arriver avec la déclaration using
? Ou dois-je simplement jeter la déclaration et la jeter manuellement?
Vous pouvez créer un 'DisposableCollection : IDisposable, IEnumerable où T: IDisposable' –
Lee
Vous pouvez écrire 'IDisposable' qui encapsule une collection de vos objets' MyDisposable' et élimine tous ses éléments lorsque vous Disposez-le. –
Pourquoi ne pas ajouter votre instruction using dans le bloc foreach? – peinearydevelopment