c# - 为什么我的“使用”语句之外的代码无法访问?
问题描述
如果在 using 语句中引发异常,则应立即调用该finally
块并处置该对象。所以try
块的其余部分不应该执行,对吧?
public static async Task<bool> AddCharName(string id, string name)
{
using (var dbConn = new DbConn())
{
await dbConn.Connection.OpenAsync();
command = "UPDATE user SET name = @name WHERE name IS NULL AND id = @id";
using (MySqlCommand update = dbConn.Connection.CreateCommand())
{
update.CommandText = command;
update.Parameters.Add("@name", MySqlDbType.VarChar).Value = name;
update.Parameters.Add("@id", MySqlDbType.VarChar).Value = id;
await update.ExecuteNonQueryAsync();
return true;
}
}
return false;
}
在我的示例中,return false
发出“检测到无法访问的代码”警告。我认为这是一个错误是正确的吗?就像我在想,如果在using (MySqlCommand upd...
井中抛出错误,那么它应该返回 false 对吗?
解决方案
真的很简单...
它总是从
return true;
它永远没有机会到达
return false;
这是编译器最清楚的情况
更新
你确定吗?那么如果在using语句中出现异常,在return true之前还是会返回true呢?
虽然using
实现了try finally,但它仍然抛出原始异常,因此仍然永远不会到达return false;
(无论发生什么)
推荐阅读
- python - CSV 处理:在每次迭代中迭代从标题开始的行
- shell - 在 JIL 脚本中附加日期的文件有问题
- python - 为什么要绘制索引而不是国家/地区?使用 Matplotlib 水平条形图
- vb.net - net.vb 只有数字和验证消息
- javascript - 曾经工作的必需脚本突然返回未定义
- java - 在 OpenGL ES 中获取眼睛位置坐标
- android - Android:重新绑定 ListView 或 RecyclerView 而不刷新 Header
- database - 如何在不使用 mongodb 删除原始属性的情况下使用聚合函数进行“查找”或“加入”
- python - 从最近的行而不是最早的行获取数据
- reactjs - 在我的权限上下文提供程序的函数错误中调用了 React 钩子“useSelector”