Как пройти Exception.Data - PullRequest
       2

Как пройти Exception.Data

2 голосов
/ 09 марта 2012

У меня есть проект, в котором в отчете об ошибках я хочу отправить полный отчет об ошибке по электронной почте. Я перехватываю исключение и передаю всю информацию другому методу, который отвечает за отправку письма в службу поддержки.

Я добавляю важные пользовательские значения в объект Exception.Data. Однако я не могу определить, какой тип мне нужно использовать в моем методе для всего объекта Data, который нужно передать.

Вот мой код:

catch (Exception exc)
{
    exc.Data.Add("ID", id);
    emailConnector.sendErrorEmail(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name.ToString() + "." + System.Reflection.MethodBase.GetCurrentMethod().Name.ToString(), exc.Message, exc.Data, exc.StackTrace);
}

Я передаю exc.Data методу sendErrorEmail, поэтому в объявлениях параметров у меня есть:

public void sendErrorEmail(string origin, string error_message, IDictionary<object, object> data, string stack)

Но я не могу получить правильное объявление типа для Exception.Data. Я предпочитаю сохранять переменные и структуру одинаковыми (без новых переменных), потому что в настоящее время у меня есть десятки методов, вызывающих sendErrorEmail в блоке Catch.

Какой тип я должен использовать, или есть более простой способ получить это Exception. Данные переданы правильно с дополнительной информацией, которую я включил в нее?

Спасибо

Ответы [ 2 ]

1 голос
/ 09 марта 2012

На странице справки кажется, что ваша проблема в том, что тип exc.Data равен IDictionary, тогда как вы объявляете его как IDictionary<object, object>.

У вас должно было появиться сообщение об ошибке, сообщающее вам тип, в котором возникли проблемы при преобразовании между ...

Кроме того, если только этот метод не используется для других целей, кроме исключений, я бы пошел спредложение в комментариях пропустить целое исключение и разобрать его впоследствии, а не проходить через несколько свойств.

0 голосов
/ 09 марта 2012

Тип Exception.Data - ListDictionaryInternal. Это частный каркасный класс, поэтому вы не можете использовать его напрямую, но он реализует следующие общедоступные интерфейсы:

[0]: {Name = "IDictionary" FullName = "System.Collections.IDictionary"}
[1]: {Name = "ICollection" FullName = "System.Collections.ICollection"}
[2]: {Name = "IEnumerable" FullName = "System.Collections.IEnumerable"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...