Die Kombination von foreach und mit
Ich bin der Iteration über eine ManageObjectCollection.( das ist Teil der WMI-Schnittstelle).
Aber das wichtigste ist, die folgende Zeile von code. :
foreach (ManagementObject result in results)
{
//code here
}
Der Punkt ist, dass ManageObject auch IDisposable implementiert, also ich würde gerne "Ergebnis" - variable in einen using-block verwenden. Jede Idee, wie dies zu tun, ohne immer zu komisch oder kompliziert?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist normalerweise nicht eine gute Praxis, weisen Sie die variable außerhalb der
using
block, da die Ressource würde entsorgt werden, könnte aber bleiben im Rahmen. Es wäre jedoch, das Ergebnis in übersichtlicher code hier, weil Sie können geschachtelte dieusing
statement gegen dieforeach
.BEARBEITEN:
Wie schon in einer anderen Antwort,ManagementObjectCollection
auch implementiertIDisposable
so habe ich Hinzugefügt, dass in einemusing
block.Kein müssen
ManagementObjectCollection
in einer using-Anweisung. dieforeach
rufenDispose()
auf der enumerator.Können Sie das folgende tun.
Das schöne an C# ist, wie die verschiedenen Sprachkonstrukte teilen können scoped-code-Blöcke. Das bedeutet, dass Sie tun konnte, Sie den folgenden zur Beseitigung der Verschachtelung.
Ist es auch nützlich zu wissen, dass die
foreach
konstruieren rufenDispose
auf das ZielIEnumerator
als gut. Der obige code entspricht.Können Sie eine schöne ordentliche syntax über Erweiterung Methoden und Enumeratoren. Zunächst definieren Sie diese in einem
public static class
irgendwo in deinem code:... die Sie dann verwenden können, nur mit dieser:
Aber Bedenken, dass, wenn Sie verwenden
WithDisposal
dann werden Sie nicht in der Lage zu speichern, die von den Objekten für die künftige Verwendung.IDisposable
.DisposableList
in meinem code für diesen Zweck.)ManagementObjectCollection
selbstIDisposable
...So wäre es...
ManagementObject
nur auf dieManagementObjectCollection
selbst.Dispose
sowohl auf derManagementObjectCollection
und dieIEnumerator
verwendet in derforeach
Schleife.Hier ist eine sauberere syntax:
Wird es seltsam Aussehen - Iteration über array-und Entsorgung jedes der Objekte, die es enthält. Wenn Sie wirklich wollen, dies zu tun, verwenden Sie
das ist genau das, was
using
Aussage macht.