抛出自定义异常收集信息并再次抛出

时间:2016-06-20 18:57:10

标签: c# exception-handling try-catch

我的项目要求解析给定目录中的文件。我创建了像MyDirectory,MyFiles,MyRecords和MyFields这样的类......它基本上是我数据的内存表示。我在异常处理方面需要帮助。我想记录异常并在屏幕上显示错误。如果在MyFields类级别发生异常,我想向CustomErrorString添加字段名称,将异常抛给MyRecords类。在MyRecords类中捕获该异常会将记录号附加到CustomErrorString,将相同的异常抛给MyFiles类。在MyFiles类中捕获异常将File Name附加到CustomErrorString等...你们中的任何人都可以告诉我如何为此创建自定义异常处理类以及如何在各种类中处理它并处理常规system.Exception?

1 个答案:

答案 0 :(得分:0)

您可以创建自定义例外。例如,像这样简单:

public class MyException : Exception
{
    public string SomeProperty { get; set; }

    public MyException(string message, string someProperty, Exception innerException)
        : base(message, innerException)
    {
        SomeProperty = someProperty;
    }
}

当捕获任何异常时,您可以在自定义异常中包装该异常,将原始异常设置为内部异常:

catch (Exception ex)
{
    throw new MyException("Custom error message", "Custom info", ex);
}

当然,你也可以在catch块中做任何你喜欢的事情。日志信息等。您可以根据需要设计自定义异常及其构造函数。

这里的要点是,您将原始异常(未经修改)保留为新异常的属性。堆栈中想要向异常添加信息的每个层都应该通过将其包装在自己的异常中来实现,该异常可以包含您喜欢的任何自定义属性。