1

在下面的以下示例中,我从数据库返回一个值并将该值转换为双精度值,如果它由于为 NULL 而下降,则将 0 设置为默认值。

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

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

4

3 回答 3

13

在这种情况下使用 Try Catch 会被认为是不好的做法吗?

绝对地。除了其他任何事情之外,如果任何事情失败,您将返回 0 ,而不仅仅是在返回值为 null 的情况下。(如果事实证明整个表已被删除,您是否真的想继续,好像一切都很好?)

如果你想检测一个空返回值,你应该明确地这样做:

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

如果有一个空返回值不是double. 你应该知道你的查询应该返回什么类型,如果你的类型错误,就会失败。

于 2013-03-28T15:40:52.113 回答
5

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

于 2013-03-28T15:39:09.567 回答
0

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

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

于 2013-03-28T15:40:35.463 回答