Exception's . tostring()和. message之间的区别是什么?

本文关键字:之间 message 区别 是什么 tostring Exception | 更新日期: 2023-09-27 18:09:57

我正在查看一些代码,我发现了e.ToString(),我想知道使用ToString()方法而不是。message是否有区别?

阅读下面的内容,听起来它返回了更多的信息。

来自Microsoft的Docs

ToString由。net紧凑框架支持。覆盖。创建并返回当前异常的字符串表示形式。

消息由。net紧凑框架支持。获取描述当前异常的消息。

Exception's . tostring()和. message之间的区别是什么?

如果你想一次性获得尽可能多的信息,请致电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()返回MessageStackTrace
ToString()也将递归地包含InnerException s。

ToString()返回一个更长的字符串,在跟踪错误时比Message更有用。

你可以试着看看:

try 
{
  throw new Exception("This is a test.");
}
catch ( Exception ex )
{
  Console.WriteLine(ex);
  Console.WriteLine(ex.Message);
}
(你会发现你是正确的,. tostring提供了更多的信息,其中包括堆栈跟踪。

ToString方法返回Message属性以及错误发生位置的信息。

Message属性用于对错误的简短描述,并且只包含实现Exception的人放在那里的内容。来自ToString的报告包含始终包含的附加信息。

如果您在调试模式下运行,错误报告包含更详细的信息,例如调用堆栈中的行号。

e.ToString()将给你一个详细的消息,如PrintTrace,我认为显示的异常名称和异常被抛出的行,e.t Message输出是一个可读的消息,只有没有规范。

可以检查Exception基构造函数