Exception's . tostring()和. message之间的区别是什么?
本文关键字:之间 message 区别 是什么 tostring Exception | 更新日期: 2023-09-27 18:09:57
我正在查看一些代码,我发现了e.ToString(),我想知道使用ToString()方法而不是。message是否有区别?
阅读下面的内容,听起来它返回了更多的信息。
来自Microsoft的Docs
ToString由。net紧凑框架支持。覆盖。创建并返回当前异常的字符串表示形式。
消息由。net紧凑框架支持。获取描述当前异常的消息。
如果你想一次性获得尽可能多的信息,请致电ToString()
:
ToString的默认实现获取抛出当前异常的类的名称、消息(我的重点)、在内部异常上调用ToString的结果以及调用Environment.StackTrace的结果。如果这些成员中的任何一个为Nothing,则其值不包含在返回的字符串中。
这样很方便,您不必自己将所有单独的元素附加在一起,检查以确保没有空元素,等等。这都是内置的…
例外。ToString方法
您也可以在reference.microsoft.com查看实际的源代码
尝试使用。net Reflector或类似的方法来查看系统上的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()
返回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
方法返回Message
属性以及错误发生位置的信息。
Message
属性用于对错误的简短描述,并且只包含实现Exception的人放在那里的内容。来自ToString
的报告包含始终包含的附加信息。
如果您在调试模式下运行,错误报告包含更详细的信息,例如调用堆栈中的行号。
e.ToString()将给你一个详细的消息,如PrintTrace,我认为显示的异常名称和异常被抛出的行,e.t Message输出是一个可读的消息,只有没有规范。
可以检查Exception基构造函数