【发布时间】:2019-08-02 15:38:58
【问题描述】:
此代码是读取和写入 ODBC 连接数据库的应用程序的一部分。它在数据库中创建一条记录,然后检查一条记录是否已成功创建,然后返回true。
我对控制流的理解如下:
command.ExecuteNonQuery() 被记录为在“方法调用对于对象的当前状态无效”时抛出 InvalidOperationException。因此,如果发生这种情况,try 块的执行将停止,finally 块将被执行,然后将执行底部的return false;。
但是,我的 IDE 声称 return false; 是无法访问的代码。这似乎是真的,我可以删除它,它编译时没有任何抱怨。但是,对我来说,抛出上述异常的代码路径似乎没有返回值。
private static bool createRecord(String table,
IDictionary<String,String> data,
System.Data.IDbConnection conn,
OdbcTransaction trans) {
[... some other code ...]
int returnValue = 0;
try {
command.CommandText = sb.ToString();
returnValue = command.ExecuteNonQuery();
return returnValue == 1;
} finally {
command.Dispose();
}
return false;
}
我在这里的理解错误是什么?
【问题讨论】:
-
旁注:不要显式调用
Dispose,而是输入using:using (var command = ...) {command.CommandText = sb.ToString(); return command.ExecuteNonQuery(); } -
finally块的含义与您想象的不同。
标签: c# exception unreachable-code