Ho una classe di eccezioni personalizzata che contiene alcuni campi aggiuntivi. Voglio che vengano scritti nel metodo ToString()
, ma se implemento il mio ToString()
, perdo altre cose utili (come scrivere il nome del tipo di eccezione, i dati di eccezione interni e la traccia dello stack).C#: Override del metodo ToString() per le eccezioni personalizzate
Qual è il modo migliore/schema per implementare il proprio metodo ToString()
per tali eccezioni? Idealmente dovrebbe riutilizzare il meccanismo esistente, ma essere formattato in modo simile all'implementazione predefinita ToString()
.
UPDATE: prepending o aggiungendo i miei campi personalizzati al base.ToString() testo non è IMHO l'ideale, per esempio
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 i campi personalizzati vengono scritti alla fine del (potenzialmente lungo) descrizione dell'eccezione. D'altra parte, voglio che il tipo di eccezione sia la prima informazione scritta nella descrizione.
UPDATE 2: Ho implementato una soluzione per questo, cercare la mia risposta qui sotto.
Sto cercando la stessa cosa, voglio aggiungere alcune informazioni extra al di fuori del campo Messaggio, ma voglio mantenere il formato ToString, con tutte le tracce dello stack e le eccezioni interne su di esso. Sarebbe interessante vedere il codice per Exception.ToString() e copiarlo aggiungendo ulteriori informazioni. – pauloya
Bene, il codice copre la maggior parte delle cose che hai menzionato. Anche se in seguito mi sono ricordato che avrei potuto usare il dizionario di Exception.Data per archiviare le mie cose personalizzate. Immagino che in tal caso questo sarebbe reso con l'implementazione predefinita di ToString(), ma non l'ho ancora provato. –