Mögliche Duplizieren:
Nested using statements in C#Ist es in Ordnung, `using` so zu verwenden?
Ich bin ein großer Fan der using
Anweisung in C#. Das finde ich:
using (var foo = new ObjectWhichMustBeDisposed())
{
other code
}
... sehr viel besser lesbar als das:
var foo = new ObjectiWhichMustBeDisposed();
try
{
other code
}
finally
{
foo.Dispose();
}
Es ist nicht nur besser lesbar, auch versehentliche Verwendung des foo
Variable nach der using
Anweisung verhindert (dh nachdem es entsorgt wurde), während im zweiten Beispiel foo
nach der Entsorgung verwendet werden konnte.
Ein Problem mit using
ist jedoch, dass es dazu neigt, zu sehr verschachtelten Code zu führen, wenn viele Einwegobjekte erstellt werden. Zum Beispiel:
using (var foo = new ObjectWhichMustBeDisposed())
{
using (var bar = new ObjectWhichMustBeDisposed())
{
other code
}
}
Wenn beiden Objekte des gleichen Typs sind, dann können Sie sie in eine einzige using
Anweisung kombinieren, etwa so:
using (var foo = new ObjectWhichMustBeDisposed(),
bar = new ObjectWhichMustBeDisposed())
{
other code
}
jedoch, wenn die Objekte nicht von dem sind gleicher Typ, dann wird das nicht funktionieren.
Meine Frage ist, ob es in Ordnung ist ein ähnliches Ende wie folgt zu erreichen:
using (var foo = new ObjectWhichMustBeDisposed())
using (var bar = new OtherObjectWhichMustBeDisposed())
{
other code
}
In diesem Fall gibt es keine geschweiften Klammern nach dem ersten Verwendung (und daher keine Notwendigkeit, den Code einrücken). Dies kompiliert, und ich nehme an, dass dies genau wie eine if
Anweisung ohne Klammern funktioniert - d. H. Es wird die nächste Anweisung (die zweite using
in diesem Fall) als seinen "Körper" verwenden.
Kann jemand bestätigen, ob das richtig ist? (Die description of the using statement ist keine Hilfe).
Es funktioniert sicherlich. Wenn es in Ordnung ist, ist zwischen Ihnen und Ihrem Programmierstil. – CodesInChaos
Ja, es ist völlig korrekt :) –
Es kompiliert gut das einzige, was ich sagen würde ist, dass für die Lesbarkeit und Konsistenz mit einem Stil der Verpackung Code-Blöcke um '{}' – MethodMan