practices practice handling exceptions example ejemplo custom best c# exception

c# - practice - ¿Cuál es la diferencia entre Exception''s.ToString() y.Message?



throw c# ejemplo (6)

Estoy revisando un código y encontré e.ToString () y me preguntaba si hay una diferencia en el uso del método ToString () en lugar de .Message?

Leyendo a continuación, parece que devuelve más información.

De los documentos de Microsoft

ToString soportado por .NET Compact Framework. Anulado Crea y devuelve una representación de cadena de la excepción actual.

Mensaje soportado por .NET Compact Framework. Recibe un mensaje que describe la excepción actual.


El e.ToString () le dará un mensaje detallado como PrintTrace. Creo que en la pantalla se muestra el nombre de excepción y la línea donde se lanzó la excepción donde e.Message Output es un mensaje legible solo sin especificación.

Puedes consultar el constructor base de excepciones.


Intente usar .NET Reflector o similar para ver qué está haciendo el método ToString en System.Exception:

[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; }


Los métodos ToString devuelven la propiedad Message junto con información sobre dónde ocurrió el error.

La propiedad Message está destinada a una breve descripción del error y solo contiene lo que la persona que implementa la Excepción pone allí. El informe desde ToString contiene información adicional que siempre se incluye.

Si está ejecutando en modo de depuración, el informe de errores contiene información más detallada, por ejemplo, números de línea en la pila de llamadas.


Si desea obtener toda la información posible de una sola vez, llame a ToString() :

La implementación predeterminada de ToString obtiene el nombre de la clase que lanzó la excepción actual, el mensaje (mi énfasis) , el resultado de llamar a ToString en la excepción interna y el resultado de llamar Environment.StackTrace. Si alguno de estos miembros es Nothing, su valor no se incluye en la cadena devuelta.

Es conveniente que no tenga que agregar todos los elementos individuales juntos, verificando que ninguno sea nulo, etc. Está todo integrado ...

Método de excepción.ToString

También puede consultar el código fuente real en reference.microsoft.com .


Siempre puedes probarlo y ver:

try { throw new Exception("This is a test."); } catch ( Exception ex ) { Console.WriteLine(ex); Console.WriteLine(ex.Message); }

(Encontrarás que estás en lo correcto, .ToString es más informativo, incluyendo entre otras cosas el seguimiento de la pila.


ToString() devuelve el Message junto con StackTrace .
ToString() también incluirá de forma recursiva InnerException s.

ToString() devuelve una cadena mucho más larga que es mucho más útil que el Message cuando se rastrean los errores.