如何传递Exception.Data

时间:2012-03-09 15:46:30

标签: c# exception-handling

我有一个项目,在我的错误报告中,我想通过电子邮件发送完整的错误报告。我正在捕获异常并将所有信息传递给另一个负责发送电子邮件给支持的方法。

我正在向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获取正确的类型声明。我更喜欢保持变量和结构相同(没有新变量),因为我目前有很多方法在Catch块中调用sendErrorEmail。

我应该使用什么类型,或者是否有更简单的方法来获取此Exception.Data正确传递了我包含在其中的额外相关信息?

由于

2 个答案:

答案 0 :(得分:1)

查看help page,您的问题似乎是exc.Data的类型为IDictionary,而您将其声明为IDictionary<object, object>

您应该有一条错误消息,告诉您在...之间转换时遇到问题的类型

除非将此方法用于除例外之外的其他事项,否则我会在评论中使用建议来传递整个异常,然后将其删除,而不是通过多个属性。

答案 1 :(得分:0)

Exception.Data的类型是ListDictionaryInternal。它是一个私有框架类,因此您不能直接使用它,但它实现了以下公共接口:

[0]: {Name = "IDictionary" FullName = "System.Collections.IDictionary"}
[1]: {Name = "ICollection" FullName = "System.Collections.ICollection"}
[2]: {Name = "IEnumerable" FullName = "System.Collections.IEnumerable"}