如果您只需要向原始异常添加信息,例如用户可读的消息或对您跟踪错误有用但对最终用户无用的特定详细信息,您可以使用Exception 的Data属性,它是一个键/值对字典。
我们广泛使用它来记录信息,例如正在执行的报告或正在处理的文件,以便操作可以确定错误发生时究竟发生了什么。用户不需要此详细信息,因为他们直接处理失败的原因。
您还可以使用它来传递对用户有意义的纯文本消息。唯一的问题是您必须在日志框架或最终用户界面中执行一些额外的工作,以便提取数据并使其对消费者有用。
例如,您可以这样做:
catch (Exception ex)
{
ex.Data.Add("UserMessage", "An error occurred while trying to load the XSLT file.");
throw;
}
然后在客户端代码中,您可以测试 UserMessage 是否存在,如果存在,则将其呈现给用户而不是 Exception:
catch (Exception ex)
{
if (ex.Data.Contains("UserMessage"))
{
MessageBox.Show(ex.Data["UserMessage"].ToString());
}
else
{
MessageBox.Show(ex.Message);
}
}