ex和ex.ToString之间有什么区别吗?asp.net

ex和ex.ToString之间有什么区别吗?asp.net,asp.net,vb.net,exception,try-catch,Asp.net,Vb.net,Exception,Try Catch,我说的是试试看。。。捕获ex作为例外。。。。结束尝试 如果我将异常传递给错误记录器,我应该传递异常对象(ex)还是ex.ToString?传递ex.ToString会丢失任何信息吗 基本上,我是在和我的经理争论,ex.ToString应该完全等同于将ex作为对象传递。我错了还是对了?异常对象与对对象本身调用.ToString()不同。这取决于您想要捕获多少关于异常本身的信息。如果您只是想要消息,那么调用.ToString()就足够了,因为这样就可以从exception对象获得消息属性。属于基本异

我说的是
试试看。。。捕获ex作为例外。。。。结束尝试

如果我将异常传递给错误记录器,我应该传递异常对象(ex)还是
ex.ToString
?传递
ex.ToString
会丢失任何信息吗


基本上,我是在和我的经理争论,ex.ToString应该完全等同于将ex作为对象传递。我错了还是对了?

异常对象与对对象本身调用
.ToString()
不同。这取决于您想要捕获多少关于异常本身的信息。如果您只是想要消息,那么调用
.ToString()
就足够了,因为这样就可以从exception对象获得消息属性。属于基本异常类的MSDN站点。如果您想要记录这些属性中的任何一个,那么您将需要exception类,而不仅仅是消息字符串


还要注意,继承基异常类的不同类提供了附加信息。例如。这些信息可能很有用,具体取决于您需要查看哪些内容来进行故障排除。

一个是异常对象,一个是调用异常对象上的
ToString
的字符串结果

它们的类型不同,信息也不同

出于日志记录的目的,没有什么区别,因为记录器通常会调用异常对象上的
ToString


但是,最好将其集中化—让异常记录器调用
ToString
,而不是在记录器的每个调用站点中执行此操作。它更易于维护,如果需要,您可以在将来使用异常执行更多操作。

一个
异常
对象将包含比
.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
Private函数ToString(ByVal needFileLineInfo作为布尔值)作为字符串
将类名设置为字符串
将消息设置为字符串=Me.message

If((message为Nothing)或lse(message.Length异常对象与.ToString()不同)。它有各种各样的属性,如果你只需要传递消息,你可以使用
Ex.message;

肯定你错了。还有一件事,千万不要和你的经理争论。在你想显示、打印或记录某件事的最后阶段使用字符串。记录器应该决定何时以及如何将异常转换为异常string.哈哈..嗯..我说了“争论”,但我只是非常礼貌地争论了一下:t汉克斯·蒂姆..现在我明白了,但我正在努力决定选择哪一个作为答案:D@LaurenceNyein当前位置如果有多个答案同样好,我通常会按最老的答案排序,然后选择第一个发布的答案。这是最公平的方式。当然+1所有您认为有用的。我强烈反对只使用Ex.Message@Zo Has。您会丢失堆栈跟踪。虽然在少数情况下这可能没问题,但通常堆栈跟踪是有价值的,值得保存。