【发布时间】:2011-06-30 23:57:27
【问题描述】:
有时异常类型的独特性足以指示确切的问题,例如 ArgumentOutOfRangeException。有时,异常更普遍,可能出于多种原因引发。在这种情况下,似乎在异常消息属性中可以找到唯一的附加信息。
在我目前的情况下,我收到了一个抛出错误消息的 CommunicationException:
已超出传入邮件的最大邮件大小配额 (65536)
由于可能会通过 CommunicationException 引发多个不同的错误,因此使用 message 属性来确定原因是不好的做法,如下所示:
catch (CommunicationException ex)
{
if (Regex.IsMatch(ex.Message, "The maximum message size quota for incoming messages .* has been exceeded"))
{
// handle thrown exception
}
throw;
}
这些消息在所有系统上是否都是稳定可靠的?是否还有其他考虑因素,例如本地化?
结论:
我的“CommunicationException”场景是一个不好的例子,因为我后来意识到 InnerException 属性中有一个 QuotaExceededException。多亏了这些响应,我知道要查找异常中存在的任何数据以指示确切原因。在本例中,它是 InnerException 属性。
对于是否应该使用消息属性来确定原因的问题,似乎普遍认为应该避免,除非别无选择。由于本地化,消息属性值在不同系统中可能不会保持不变。
【问题讨论】:
标签: c# exception exception-handling