Другие отмечают это как потенциальную проблему, но я хочу поднять ее как очень определенную проблему: ваше утверждение об использовании не приносит вам никакой пользы в данный момент .
Когда вы пишете оператор использования следующим образом:
SomeType x = value1;
using (x)
{
x = value2;
}
это value1
, который будет расположен в конце блока, не value2
. В вашем коде response
равен нулю, пока не окажется внутри блока; WebResponse
в итоге вы получите , а не .
Вы должны увидеть предупреждение об этом следующим образом:
предупреждение CS0728:
Возможно неправильное назначение на местный
«ответ», который
является аргументом оператора использования или блокировки. Уничтожить вызов или
разблокировка произойдет по первоначальному значению локального.
Это предупреждение важно - учти его.
Оставляя это в стороне, вполне разумно поместить блок try / catch в оператор using ... но в этом случае он, вероятно, должен быть вне оператора using, что позволит вам инициализировать response
переменная в соответствующее время, так что ответ всегда будет расположен. Я также хотел бы рассмотреть возможность использования нескольких блоков catch для вызова общего метода, а не повторного использования «is».