Załóżmy, że zdefiniowałem klasę MyDisposable : IDisposable
. Wiem, że mogę dostarczyć zakodowane listy IDisposable
obiektów do rachunku using
:Czy istnieje sposób na użycie instrukcji z dynamicznie tworzonymi celami?
using (MyDisposable firstDisposable = new MyDisposable(),
secondDisposable = new MyDisposable())
{
// do something
}
Teraz powiedzmy Mam kilka metod, które wykonują operacje na zbiorze moich jednorazowych przedmiotów i chcę to zrobić wewnątrz instrukcji using
. To może wyglądać tak (ale to nie działa oczywiście dlatego, że za pomocą bloku spodziewa się jeden lub więcej IDisposable
obiektów i olewam pojedynczy obiekt kolekcji):
using (var myDisposables = GetMyDisposables())
{
foreach (var myDisposable in myDisposables)
{
DoSomething(myDisposable);
DoSomethingElse(myDisposable);
}
}
Oto inne metody tylko dla jasności :
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
}
Czy jest jakiś sposób, mogę to zrobić z oświadczeniem using
? Czy muszę po prostu wyrzucić oświadczenie i ręcznie zutylizować?
Można utworzyć 'DisposableCollection : IDisposable, IEnumerable gdzie T: IDisposable' –
Lee
Możesz napisać 'IDisposable', który przechwytuje kolekcję twoich obiektów' MyDisposable' i zrzuca wszystkie jej elementy kiedy pozbądź się go. –
Dlaczego nie dodasz instrukcji using w bloku foreach? – peinearydevelopment