碰到一个函数,返回值后无法处理后续步骤,如以下代码
string value()
{
using SqlCommand sql = new("select XXX", new SqlConnection(XXX));
sql.Connection.Open();
using SqlDataReader reader = sql.ExecuteReader();
if (reader.HasRows)
{
reader.Read();
return reader.GetDecimal(0);
}
else return 1;
sql.Connection.Close();
}
这种情况下
sql.Connection.Close()
是无法触发的
这个时候try就有用了
可以用try改成以下形式
string value()
{
using SqlCommand sql = new("select XXX", new SqlConnection(XXX));
sql.Connection.Open();
try
{
using SqlDataReader reader = sql.ExecuteReader();
if (reader.HasRows)
{
reader.Read();
return reader.GetDecimal(0);
}
else return 0;
}
finally
{
sql.Connection.Close();
}
}
这样就能触发
sql.Connection.Close();
原本finally不管程序是否有问题一定都会触发,所以换个思路,就算函数已经返回值了,也一定能触发的想法试了一试,结果和想着一样,必定会触发。
所以用了try finally就能让函数先返回值,再去处理后续工作。