使用Try Catch转换值

Sim*_*mon 1 c# sql

在下面的下面的例子中,我返回从一个数据库中的值,并且由于是NULL值转换为双,如果它翻倒,则0被设置为默认值.

using (SqlCommand cmd = new SqlCommand(sql.ToString(), conn))
{
    try
    {
        this.value = Convert.ToDouble(cmd.ExecuteScalar());
    }
    catch (Exception)
    {
        this.value = 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

通过在这种情况下使用Try Catch,这会被视为不良做法吗?什么是处理这种情况的更好方法?

Jon*_*eet 13

通过在这种情况下使用Try Catch,这会被视为不良做法吗?

绝对.除了其他任何东西,如果有任何失败,你返回0 ,而不仅仅是返回值为null.(如果事实证明整个表已被删除,你真的想继续好像一切都好吗?)

如果要检测空返回值,则应明确执行以下操作:

object result = cmd.ExecuteScalar();
return result == null ? 0d : (double) result;
Run Code Online (Sandbox Code Playgroud)

这将仍然抛出(故意),如果有一个非空返回值是不是一个double.您应该知道您的查询应该返回什么类型,如果事实证明您的类型错误,则会失败.


JMK*_*JMK 5

你想要Double.TryParse,它返回一个布尔值,你将一个未初始化的double变量传递给它,out参数被赋值.