在最后一个块中创建2个异常

时间:2017-08-29 19:22:20

标签: c# exception

我有以下代码:

finally
{
    if (!isDnsSet)
    {
        var exception = new Exception(<DNS-INFORMATION>);
                        localLog.TraceException(exception);
                        throw exception;
    }
}

就目前而言,此异常会向用户抛出太多信息,而这些信息对他们来说并不是特别需要。我希望能够使用我的exception类来记录localLog,但也会使用更简洁的消息抛出另一个异常。

我正在考虑使用缩短的消息创建另一个异常,并且仍然使用我的类记录原始的,更详细的异常。

有没有更优雅的方式来做这件事,或者我会做一些像:

var shortException = new Exception(<short and sweet message>);
var longException = new Exception(<not so short and sweet but still useful for other devs>);
localLog.TraceException(longException);
throw shortException;

3 个答案:

答案 0 :(得分:1)

我认为更简洁的方法是将更长的异常作为内部异常:

finally
{
    if (!isDnsSet)
    {
        var innerException = new Exception(<not so short and sweet but still useful for other devs>);
        var exception = new Exception(<short and sweet message>, innerException);
        localLog.TraceException(exception);
        throw exception;
    }
}

通过这种方式,您抛出的异常与记录的异常之间保持一致,从而使诊断变得更容易。

答案 1 :(得分:1)

一种方法是创建一个包含长消息和短消息的自定义异常。在您的图书馆外获得例外的用户可以通过Exception的{​​{1}}媒体资源访问该短信,而您的Message方法可以通过其提供的附加属性访问该长版本您的自定义例外:

TraceException

内部public class DetailedException : Exception { public string DetailedMessage { get; } public DetailedException(string longMessage, string shortMessage) : base(shortMessage) { DetailedMessage = longMessage; } } 方法:

TraceException

答案 2 :(得分:0)

异常处理程序无法接收并处理longException,并且作为其函数的一部分,抛出shortException?