Tengo una clase de excepción personalizada que contiene algunos campos adicionales. Quiero que se escriban en el método ToString()
, pero si implemento mi propio ToString()
, pierdo algunas otras cosas útiles (como escribir el nombre del tipo de excepción, los datos de la excepción interna y el seguimiento de la pila).C#: Anulación del método ToString() para excepciones personalizadas
¿Cuál es la mejor forma/patrón para implementar su propio método ToString()
para tales excepciones? Lo ideal sería reutilizar el mecanismo existente, pero se formatee de forma similar a la implementación predeterminada ToString()
.
ACTUALIZACIÓN: prepending o de agregar mis campos personalizados a la base.ToString() texto no es mi humilde opinión ideales, por ejemplo
PimTool.Utilities.OERestServiceUnavailableException: test ---> System.InvalidOperationException: inner message
--- End of inner exception stack trace ---
at PimTool.Tests.Services.OE.OERestClientTests.ExceptionsLogging() in D:\svn\NewPimTool\PimTool.Tests\Services\OE\OERestClientTests.cs:line 178,
StatusCode=0, message='test', requestId='535345'
significa que los campos personalizados se escriben al final de la (potencialmente larga) descripción de la excepción. Por otro lado, quiero que el tipo de excepción sea la primera información escrita en la descripción.
ACTUALIZACIÓN 2: He implementado una solución para esto, busque mi propia respuesta a continuación.
Estoy buscando lo mismo, quiero agregar algo de información extra afuera, no en el campo Mensaje, pero quiero que se mantenga el formato ToString, con todas las trazas de la pila y las excepciones internas. Sería interesante ver el código de Exception.ToString() y copiarlo agregando más información. – pauloya
Bueno, el código cubre la mayoría de las cosas que mencionaste. Aunque más tarde recordé que podría haber usado el diccionario Exception.Data para almacenar mis cosas personalizadas. Supongo que en ese caso esto se representaría con la implementación predeterminada de ToString(), pero aún no lo he probado. –