Powiel możliwe:
Nested using statements in C#Czy można używać `use` w ten sposób?
Jestem wielkim fanem rachunku w C# using
. Uważam to:
using (var foo = new ObjectWhichMustBeDisposed())
{
other code
}
... bardzo dużo bardziej czytelny niż ten:
var foo = new ObjectiWhichMustBeDisposed();
try
{
other code
}
finally
{
foo.Dispose();
}
Nie tylko jest to bardziej czytelne, ale również zapobiega przypadkowym użyciem zmiennej foo
po oświadczeniu using
(tj po jego usunięciu), podczas gdy w drugim przykładzie można użyć foo
po jego usunięciu.
Jednym z problemów z using
jest jednak to, że prowadzi to do bardzo zagnieżdżonego kodu, jeśli tworzonych jest wiele obiektów jednorazowego użytku. Na przykład:
using (var foo = new ObjectWhichMustBeDisposed())
{
using (var bar = new ObjectWhichMustBeDisposed())
{
other code
}
}
Jeżeli oba obiekty są tego samego typu, a następnie można je połączyć w jeden using
oświadczeniu tak:
using (var foo = new ObjectWhichMustBeDisposed(),
bar = new ObjectWhichMustBeDisposed())
{
other code
}
Jednakże, jeśli obiekty nie są z ten sam typ, to nie zadziała.
Moje pytanie brzmi, czy jest to OK, aby osiągnąć podobny koniec takiego:
using (var foo = new ObjectWhichMustBeDisposed())
using (var bar = new OtherObjectWhichMustBeDisposed())
{
other code
}
W tym przypadku nie ma kręcone szelki po pierwszym użyciu (a więc nie ma potrzeby, aby wciąć kod). To kompiluje, a I zakłada, że działa to tak jak instrukcja if
bez żadnych nawiasów klamrowych - to znaczy użyje następnego oznaczenia (w tym przypadku drugiego using
) jako swojego "ciała".
Czy ktoś może potwierdzić, czy to prawda? (The description of the using statement nie jest pomocny).
To na pewno działa. Jeśli jest OK, to między tobą a twoim stylem kodowania. – CodesInChaos
Tak, to jest całkowicie poprawne :) –
Kompiluje dobrze, jedyne co powiedziałbym to to, że dla czytelności i spójności trzymam się stylu owijania bloków kodu wokół '{}' – MethodMan