Предложение использовать заявление using
является хорошим; но это не ваш единственный выбор. Разработчики просто предпочитают его синтаксически «чистый» внешний вид и простоту использования.
Главное (и то, что using
всегда гарантирует для вас) - это убедиться, что вы звоните FileStream.Close
независимо от того, что. Если вы ударите исключение, этот код может быть пропущен. Поэтому, по крайней мере, позвоните по телефону Close
в блоке finally
.
Лично, если я пишу какую-либо ошибку обработки себе, я предпочитаю try
/catch
/finally
к try
/using
/catch
. Другой сценарий, в котором I много, предпочитает использовать finally
, где я работаю с несколькими объектами IDisposable
, и я хочу избежать глубокой вложенности. Рассмотрим следующий код:
try {
using (DisposableObject obj1 = GetDisposableObject()) {
// do something
using (DisposableObject obj2 = GetAnotherDisposableObject()) {
// do something else
using (DisposableObject obj3 = GetYetAnotherDisposableObject()) {
// do even more things
// this code is now quite nested
}
}
}
} catch (SomeException ex) {
// some error-handling magic
}
Теперь сравните, что это:
DisposableObject obj1 = null;
DisposableObject obj2 = null;
DisposableObject obj3 = null;
try {
obj1 = GetDisposableObject();
// do something
obj2 = GetAnotherDisposableObject();
// do something else
obj3 = GetYetAnotherDisposableObject();
// do even more things
// this code doesn't have to be nested
} catch (SomeException ex) {
// some error-handling magic
} finally {
if (obj3 != null) obj3.Dispose();
if (obj2 != null) obj2.Dispose();
if (obj1 != null) obj1.Dispose();
}
Лично я считаю, последний гораздо более удобным для чтения.
Очевидно, что это личное предпочтение. Вышеупомянутые два примера кода дают одинаковый результат.
Каким файлом пользуется? – SLaks