Я понимаю, что есть несколько вопросов о передовых методах обработки исключений, но мне пришлось сделать несколько изменений на найденных примерах. Моей целью было избавиться от основных исключений, таких как «ArgumentException», «FileNotFoundException», «ArrayIndexOutOfBoundsException» и т. Д.
Если вы можете изобразить следующий код в иерархии. Таким образом, Process () вызывает ValidateData (), которая вызывает CSVData (). Я делаю в основном такие же вещи, , оборачивая все известные функции, включая мои, затем помещая это в исключение для метода и передавая его как внутреннее исключение. Это достойный способ выполнить эту задачу? Это работает для меня, но я хочу привыкнуть обрабатывать исключения очень чистым способом, так как некоторые мои прошлые проекты были покрыты "catch (Exception e)" .... и разбираем e.Message ... "
Вот мой пример кода:
public class CSVData
{
DataTable data;
public CSVData(string file)
{
try
{
this.data = CSVReader.ToDataTable(file); //throws a few basic exceptions
}
catch (FileNotFoundException e)
{
throw new FailedLoadingCSVException(e, currentLine, file);
}
catch (IOException e)
{
throw new FailedLoadingCSVException(e, currentLine, file);
}
catch (ArgumentNullException e)
{
throw new FailedLoadingCSVException(e, currentLine, file);
}
catch (ArgumentException e)
{
throw new FailedLoadingCSVException(e, currentLine, file);
}
catch (OutOfMemoryException e)
{
throw new FailedLoadingCSVException(e, currentLine, file);
}
}
class FailedLoadingCSVException : Exception
{
public int failedAtLine;
public FailedLoadingCSVException(Exception e, int failedLine, string file)
:base ("The system failed at loading "+file+" at line "+failedLine, e)
{
this.failedAtLine = failedLine;
}
}
}