我談論Try ... Catch ex as Exception .... End Try
ex vs ex.ToString有沒有區別? asp.net
如果我通過異常錯誤日誌,我將傳遞異常對象(前)或ex.ToString
?我會通過傳遞ex.ToString
來失去任何信息嗎?
基本上我和我的經理爭辯說,ex.ToString應該像ex對象一樣激動人心。 M我錯了還是對嗎?
我談論Try ... Catch ex as Exception .... End Try
ex vs ex.ToString有沒有區別? asp.net
如果我通過異常錯誤日誌,我將傳遞異常對象(前)或ex.ToString
?我會通過傳遞ex.ToString
來失去任何信息嗎?
基本上我和我的經理爭辯說,ex.ToString應該像ex對象一樣激動人心。 M我錯了還是對嗎?
異常對象不同於調用對象本身的.ToString()
。這取決於您想要捕獲關於異常本身的信息量。如果你只是想要消息,那麼調用.ToString()
就足夠了,因爲它最終會給你從異常對象的消息屬性。屬於基本異常類的MSDN站點lists different properties。如果你想記錄任何這些屬性,那麼你會想要類,而不僅僅是消息字符串。
另請注意,繼承基本異常類的不同類提供了更多信息。作爲一個例子,HttpException class provides additional properties。根據您需要查看哪些信息進行故障排除,該信息可能會有用。
一個是異常對象,一個是異常對象調用ToString
的字符串結果。
它們是不同的類型和不同的信息。
出於記錄目的,記錄器通常會在異常對象上通常調用ToString
。
但是,最好集中這一點 - 讓異常記錄器調用ToString
,而不是在記錄器的每個調用站點執行此操作。它更具可維護性,並且在需要的時候爲將來的例外做更多的事情而開放。
exception
對象將包含比.ToString()
的結果更多的信息。至少,這些信息將以更有用的格式顯示(例如,您可以輕鬆獲得單個作品)。
如果您在記錄器中所做的只是撥打電話exception.ToString()
,但不使用任何其他功能,那麼目前它將沒有真正的區別。但是,傳遞異常對象可能更適合將來打樣(也就是說,如果您開始需要異常的更多屬性)。
爲了什麼它的價值也就是ToString
撥打以下過載傳遞true
作爲參數:
Private Function ToString(ByVal needFileLineInfo As Boolean) As String
Dim className As String
Dim message As String = Me.Message
If ((message Is Nothing) OrElse (message.Length <= 0)) Then
className = Me.GetClassName
Else
className = (Me.GetClassName & ": " & message)
End If
If (Not Me._innerException Is Nothing) Then
className = String.Concat(New String() { className, " ---> ", Me._innerException.ToString(needFileLineInfo), Environment.NewLine, " ", Environment.GetRuntimeResourceString("Exception_EndOfInnerExceptionStack") })
End If
Dim stackTrace As String = Me.GetStackTrace(needFileLineInfo)
If (Not stackTrace Is Nothing) Then
className = (className & Environment.NewLine & stackTrace)
End If
Return className
End Function
正如你可以看到它基本上將輸出類信息,innerexception.ToString()和堆棧跟蹤。
異常對象不同於.ToString()。它有各種各樣的屬性,如果你只需要傳遞消息,你也可以使用Ex.Message;
絕對是你錯了..還有一件事,從來沒有與你的經理爭辯..:D – dotNETbeginner
最後使用字符串階段,你想diplay,打印或登錄的東西。記錄器應該決定何時以及如何將異常轉換爲字符串。 –
哈哈..好吧..我說的爭論,但我只是非常有禮貌地辯解:D – lawphotog