Using
не не перехватывает исключения, он просто гарантирует вызов .Dispose()
.
Это потому, что
using (ResourceType resource = new ResourceType())
эквивалентно:
ResourceType resource;
try
{
resource = new ResourceType();
/* The insides of the using block */
}
finally
{
resource.Dispose();
}
Вызов .Dispose()
будет всегда .Вызов Dispose
даже оценивается, если вы вернетесь в свой блок using
(до того, как он "действительно" вернется).Вызов Dispose
даже оценивается, если выброшено исключение.
Однако, если выбрасывается исключение, это исключение все равно будет препятствовать оценке последующих строк кода (за исключением .Dispose()
, который всегда оценивается).
Таким образом, если возникнет исключение, ваш return
не вернется ни в одном из ваших утверждений, но ваш DataTable
все равно будет утилизирован.
Если вы хотите гарантировать возвратпроисходит, даже если возникает ошибка, вы хотите сделать что-то вроде этого:
List resultsList = new List();
try
{
using (DataTable resultTable = DBUtility.GetSingleDBTableResult(connectionString, "SELECT * FROM MyDBTable"))
{
foreach (DataRow dataRow in resultTable.Rows)
{
resultsList.Add(dataRow[0].ToString());
}
}
}
catch
{
}
return resultsList;