Diciamo che ho definito una classe MyDisposable : IDisposable
. So che posso fornire un elenco hardcoded di IDisposable
oggetti al using
dichiarazione:C'è un modo per avere un'istruzione using con target creati dinamicamente?
using (MyDisposable firstDisposable = new MyDisposable(),
secondDisposable = new MyDisposable())
{
// do something
}
Ora diciamo che ho un paio di metodi che eseguono operazioni su una raccolta dei miei oggetti usa e getta, e voglio fare questo all'interno di una dichiarazione using
. Potrebbe assomigliare a questo (ma questo non funziona, naturalmente, perché il blocco utilizzando aspetta uno o più oggetti IDisposable
e sto passando un oggetto di raccolta singolo):
using (var myDisposables = GetMyDisposables())
{
foreach (var myDisposable in myDisposables)
{
DoSomething(myDisposable);
DoSomethingElse(myDisposable);
}
}
Qui ci sono gli altri metodi solo per maggiore chiarezza :
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
}
c'è qualche modo per ottenere questo risultato con l'affermazione using
? O devo semplicemente buttare via la dichiarazione e smaltirla manualmente?
è possibile creare un 'DisposableCollection : IDisposable, IEnumerable dove T: IDisposable' –
Lee
È possibile scrivere 'IDisposable' che incapsula una raccolta degli oggetti' MyDisposable' e dispone di tutti i suoi elementi quando si smaltirlo. –
Perché non aggiungi la tua istruzione using all'interno del blocco foreach? – peinearydevelopment