我正在查看一些代碼,我發現e.ToString(),我想知道是否有區別使用ToString()方法,而不是.Message?Exception的.ToString()和.Message之間的區別是什麼?
閱讀下面,它聽起來像它會返回更多信息。
的ToString 由.NET Compact Framework提供支持。 覆蓋。創建並返回當前異常的字符串表示形式。
消息 受.NET Compact Framework支持。 獲取描述當前異常的消息。
我正在查看一些代碼,我發現e.ToString(),我想知道是否有區別使用ToString()方法,而不是.Message?Exception的.ToString()和.Message之間的區別是什麼?
閱讀下面,它聽起來像它會返回更多信息。
的ToString 由.NET Compact Framework提供支持。 覆蓋。創建並返回當前異常的字符串表示形式。
消息 受.NET Compact Framework支持。 獲取描述當前異常的消息。
如果你希望得到儘可能多的信息可能在一氣呵成,叫ToString()
:
的ToString的默認實現獲取拋出當前異常的類,消息的名稱(我的強調),對內部異常調用ToString的結果,以及調用Environment.StackTrace的結果。如果這些成員中的任何一個都是Nothing,則其值不會包含在返回的字符串中。
它的方便,你不必所有的單個元素追加自己一起,檢查,以確保沒有一個是空,等這一切都建立在...
你也可以在reference.microsoft.com查看實際的源代碼。
ToString
方法返回Message
屬性以及錯誤發生位置的信息。
Message
屬性旨在用於對錯誤的簡短描述,並且只包含執行Exception的人員放置在那裏的內容。來自ToString
的resport包含總是包含的附加信息。
如果您在調試模式下運行,錯誤報告包含更詳細的信息,例如,調用堆棧中的行號。
ToString()
返回Message
以及StackTrace
。
ToString()
也將遞歸地包括InnerException
s。
ToString()
返回一個更長的字符串,它在跟蹤錯誤時比Message
有用得多。
你總是可以只是嘗試一下,看看:
try
{
throw new Exception("This is a test.");
}
catch (Exception ex)
{
Console.WriteLine(ex);
Console.WriteLine(ex.Message);
}
(你會發現你是正確的,是的ToString更多的信息,包括除其他事項外堆棧跟蹤
你應該使用這個catch塊代替:catch(Exception ex) Console.WriteLine(「#### TOSTRING ######」的結果); Console.WriteLine離); Console.WriteLine(); Console.WriteLine(「#### RESULT OF MESSAGE ######」);; Console.WriteLine(ex.Message); }'。這將有助於OP區分兩者的輸出 –
電子。ToString()會給你一個像PrintTrace這樣的詳細消息,我認爲哪個Display是異常名稱和異常被拋出的那一行,其中e.Message輸出只有一個只讀規範的可讀消息。
您可以檢查異常基類的構造
嘗試使用.NET反射器或類似的,看看有什麼關於System.Exception的ToString方法做:
[TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
public override string ToString()
{
return this.ToString(true);
}
private string ToString(bool needFileLineInfo)
{
string className;
string message = this.Message;
if ((message == null) || (message.Length <= 0))
{
className = this.GetClassName();
}
else
{
className = this.GetClassName() + ": " + message;
}
if (this._innerException != null)
{
className = className + " ---> " + this._innerException.ToString(needFileLineInfo) + Environment.NewLine + " " + Environment.GetRuntimeResourceString("Exception_EndOfInnerExceptionStack");
}
string stackTrace = this.GetStackTrace(needFileLineInfo);
if (stackTrace != null)
{
className = className + Environment.NewLine + stackTrace;
}
return className;
}
我想你回答了你自己的問題 –
的例外是一個使用ToString的對象將對象轉換爲一個String(它是一個對象),所以它可能簡單地等於Namespace.Exception。 –
@Ramhound:'Exception'覆蓋'ToString'。 – SLaks