我正在一個新的地方工作,在代碼中看到很多東西,我不太喜歡。正確捕捉異常.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