我正在一个新的地方工作,在代码中看到很多东西,我不太喜欢。正确捕捉异常.net
我已经看到了很多这样的代码:
try
{
dAmount = double.Parse(((TextBox)control.Items[someRow].FindControl("txtControl")).Text);
}
catch
{
dAmount = 0;
}
我读计算器等的频繁,我知道这是不对的,但我自己辩论有关的最佳方式来处理这个问题。
显然认为设置dAmount=0;
是处理异常的好办法,但看到如何double.Parse
只能扔3个例外(ArgumentNullException,出现FormatException,发生OverflowException),如果我们的情况下,添加的NullReferenceException的FindControl
或其他物体回来的开发null,那么在我看来,我可以覆盖所有的裂缝,但代码看起来很丑,我正在寻找建议,也许有更好的方法?
这是我想出了
try
{
dAmount = double.Parse(((TextBox)control.Items[someRow].FindControl("txtControl")).Text);
}
catch (NullReferenceException nullRefEx)
{
dAmount = 0;
nwd.LogError("***Message: " + nullRefEx.Message + " ***Source: " + nullRefEx.Source + " ***StackTrace: " + nullRefEx.StackTrace);
}
catch (ArgumentNullException argNullEx)
{
dAmount = 0;
nwd.LogError("***Message: " + argNullEx.Message + " ***Source: " + argNullEx.Source + " ***StackTrace: " + argNullEx.StackTrace);
}
catch (FormatException frmEx)
{
dAmount = 0;
nwd.LogError("***Message: " + frmEx.Message + " ***Source: " + frmEx.Source + " ***StackTrace: " + frmEx.StackTrace);
}
catch (OverflowException ovrEx)
{
dAmount = 0;
nwd.LogError("***Message: " + ovrEx.Message + " ***Source: " + ovrEx.Source + " ***StackTrace: " + ovrEx.StackTrace);
}
BTW,我不控制日志记录功能是从另一支球队在这里,我知道是怎么样的丑陋。
如何在一般的Exception
中保存例外情况,最后只有一个nwd.LogError
调用?欢迎任何建议。
你应该只是使用TryParse,如果它返回false do dAmount = 0 – 2014-09-26 17:45:02
得说我不知道我怎么没有想到,你的评论应该是一个答案它的最佳答案:P – Termiux 2014-09-26 17:47:40
我会添加一个答案。 – 2014-09-26 17:48:10