Я сделал некоторые определенные пользователем исключения, и я хотел бы добавить уровень ошибки к каждому исключению. forexample userInputerror и internalError. Причина, по которой я кодирую это, заключается в том, что я хочу узнать об исключениях, поэтому я изобретаю колесо вместо использования log4net.пользовательские исключения с перечислением «уровень ошибки»
Мой код выглядит следующим образом.
У меня есть класс с именем MyException:
namespace ExceptionHandling
{
public class MyException : ApplicationException
{
public MyException(string message)
: base(message)
{
}
public MyException(string message, Exception innerException)
: base(message, innerException)
{
}
}
}
Один из моих исключений является IntParseException, этот класс выглядит следующим образом:
namespace ExceptionTester
{
class IntParseException : MyException
{
string dataToParse;
public IntParseException(string dataToParse)
: base(" [ERROR] Could not parse " + dataToParse + " to int")
{
this.dataToParse = dataToParse;
}
public IntParseException(string dataToParse, Exception innerexception)
: base(" [ERROR] Could not parse " + dataToParse + " to int", innerexception)
{
this.dataToParse = dataToParse;
}
}
}
В моей MainForm я обрабатывая мои исключения следующим образом:
private void btnSave_Click(object sender, EventArgs e)
{
try
{
try
{
int.Parse(txtNumber.Text);
}
catch (Exception ex)
{
throw new IntParseException(txtNumber.Text, ex);
}
}
catch (Exception ex)
{
LogWriter lw = new LogWriter(ex.Source, ex.TargetSite.ToString(), ex.Message);
logwindow.upDateLogWindow();
MessageBox.Show("Please enter a number");
}
}
Я лесозаготовка моих исключений и что класс выглядит это понравился:
namespace ExceptionTester
{
class LogWriter
{
public LogWriter(string exSource, string exTargetSite, string exMessage)
{
StreamWriter SW;
SW = File.AppendText(@"logfile.txt");
string timeStamp = "[" + DateTime.Now + "] ";
string source = "An error occured in the application ";
string targetSite = ", while executing the method: ";
SW.WriteLine(timeStamp + source + exSource + targetSite +exTargetSite + exMessage);
SW.Flush();
SW.Close();
}
}
}
Так что мой вопрос, как я могу добавить перечисление моих исключений, которые позволили бы мне выбрать, какие виды исключений Я хочу войти в систему. Например, в какой-то точке я хотел бы регистрировать все исключения, но в другое время я хочу только регистрировать userInputErrors.
Я не могу изменить его во время работы моей программы. поэтому мне не нужно что-то менять в коде. Просто подумал, что enum можно использовать для чего-то подобного, но я просто не знаю, как это сделать. –
Я бы сказал, как общее правило, что то, что вы предлагаете, является плохим дизайнерским решением. Я имею в виду, что обработка исключений по своей природе является «реальным временем». Я просто не вижу никакой пользы для этой парадигмы обработки исключений. – Didaxis
И вы все равно можете выполнить «изменение», какие исключения обрабатывать по типу. Перечисление - это просто ненужная «жестокость». – Didaxis