我正在查看一些代码,我发现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