首页 > 解决方案 > 为什么我的“使用”语句之外的代码无法访问?

问题描述

如果在 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 对吗?

标签: c#

解决方案


真的很简单...

总是

return true;

它永远没有机会到达

return false;

这是编译器最清楚的情况

更新

你确定吗?那么如果在using语句中出现异常,在return true之前还是会返回true呢?

虽然using实现了try finally,但它仍然抛出原始异常,因此仍然永远不会到达return false;(无论发生什么)


推荐阅读