У меня есть специальный класс исключений, который содержит некоторые дополнительные поля. Я хочу, чтобы они были выписаны в методе ToString()
, но если я реализую свой собственный ToString()
, я теряю некоторые другие полезные вещи (например, записывая имя типа исключения, данные внутреннего исключения и трассировку стека).C#: переопределить метод ToString() для пользовательских исключений
Каков наилучший способ/образец для реализации собственного метода ToString()
для таких исключений? В идеале он должен повторно использовать существующий механизм, но быть отформатирован таким же образом, как и по умолчанию ToString()
.
UPDATE: или добавляя слева, добавляя свои собственные поля в base.ToString() текст не является идеальным ИМХО, например
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'
означает, что пользовательские поля написаны в конце (потенциально долго) описание исключения. С другой стороны, я хочу, чтобы тип исключения был первой информацией, записанной в описании.
ОБНОВЛЕНИЕ 2: Я реализовал решение для этого, ищите мой собственный ответ ниже.
Я ищу то же самое, я хочу добавить дополнительную информацию снаружи, а не в поле «Сообщение», но я хочу, чтобы формат ToString сохранялся со всей трассировкой стека и внутренними исключениями на нем. Было бы интересно увидеть код Exception.ToString() и скопировать его, добавив больше информации. – pauloya
Ну, код охватывает большинство вещей, о которых вы упомянули. Хотя позже я вспомнил, что я мог использовать словарь Exception.Data для хранения моих настраиваемых материалов. Я предполагаю, что в этом случае это будет реализовано по умолчанию для ToString(), но я еще не пробовал. –