在下面的示例中,我从数据库返回一个值并将值转换为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,这会被认为是不好的做法吗?什么是处理这种情况的更好方法?
答案 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更有效,更容易理解。