使用Try Catch转换值

时间:2013-03-28 15:38:01

标签: c# sql

在下面的示例中,我从数据库返回一个值并将值转换为double,如果由于为NULL而失败,则将0设置为默认值。

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

在这个例子中使用Try Catch,这会被认为是不好的做法吗?什么是处理这种情况的更好方法?

3 个答案:

答案 0 :(得分:13)

  

在这个例子中使用Try Catch,这会被认为是不好的做法吗?

绝对。除了其他任何内容,如果任何失败,则返回0,而不仅仅是返回值为null。 (如果事实证明整个表已被删除,那么真的想要继续好像一切都很好吗?)

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

object result = cmd.ExecuteScalar();
return result == null ? 0d : (double) result;

如果不是 a double的非空返回值,这将抛出(并故意)。你应该知道你的查询应该返回什么类型,如果事实证明你的类型错误就会失败。

答案 1 :(得分:5)

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

答案 2 :(得分:0)

这将被视为不良做法。尝试Catch不适用于这样的程序流程。如果抛出了另一个异常,那么你仍然会捕获它并将值设置为0.

专门检查您的计划流程。显式处理null更有效,更容易理解。