Здравствуйте, samius, Вы писали:
_FR>>Если тип d спроектирован правильно, то ничего страшного быть не может, так как по контракту IDisposable:
S>Да, как раз речь о том, что при обращении к правильно спроектированному классу за пределами блока using наверняка завершится исключением ObjectDisposedException. А объявление переменной вне блока using как раз способствует этому.
Да, если есть возможность, всегда надо объевлять переменную как можно "локальнее" и как можно длиже к месту использования.
_FR>>А по-другому иногда не получается: например, прежде чем usaть объяет, надо проверить некоторые условия.
S>Можно вынести код получения объекта и его проверки во вспомогательный метод, обращение к которому сделать из блока using(var d = GetD())
Очень может быть. Какой вариант выглядит лучше и почему:
var d = smth();
if(condition(d)) {
using(d) {
//…
}//using
}//if
или
Func<IDisposable> acquire = () => {
var x = smth();
return condition(x) ? x : null;
};
using(var d = acquire()) { // Пользуемся тем, что в using->finally есть проверка на null
if(d != null) {
//…
}//if
}//if
?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>