2012-10-12 84 views
2

我談論Try ... Catch ex as Exception .... End Tryex vs ex.ToString有沒有區別? asp.net

如果我通過異常錯誤日誌,我將傳遞異常對象(前)或ex.ToString?我會通過傳遞ex.ToString來失去任何信息嗎?

基本上我和我的經理爭辯說,ex.ToString應該像ex對象一樣激動人心。 M我錯了還是對嗎?

+0

絕對是你錯了..還有一件事,從來沒有與你的經理爭辯..:D – dotNETbeginner

+3

最後使用字符串階段,你想diplay,打印或登錄的東西。記錄器應該決定何時以及如何將異常轉換爲字符串。 –

+0

哈哈..好吧..我說的爭論,但我只是非常有禮貌地辯解:D – lawphotog

回答

4

異常對象不同於調用對象本身的.ToString()。這取決於您想要捕獲關於異常本身的信息量。如果你只是想要消息,那麼調用.ToString()就足夠了,因爲它最終會給你從異常對象的消息屬性。屬於基本異常類的MSDN站點lists different properties。如果你想記錄任何這些屬性,那麼你會想要,而不僅僅是消息字符串。

另請注意,繼承基本異常類的不同類提供了更多信息。作爲一個例子,HttpException class provides additional properties。根據您需要查看哪些信息進行故障排除,該信息可能會有用。

6

一個是異常對象,一個是異常對象調用ToString的字符串結果。

它們是不同的類型和不同的信息。

出於記錄目的,記錄器通常會在異常對象上通常調用ToString

但是,最好集中這一點 - 讓異常記錄器調用ToString,而不是在記錄器的每個調用站點執行此操作。它更具可維護性,並且在需要的時候爲將來的例外做更多的事情而開放。

1

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()和堆棧跟蹤。

0

異常對象不同於.ToString()。它有各種各樣的屬性,如果你只需要傳遞消息,你也可以使用Ex.Message;

相關問題