Я пытаюсь поместить логику исключения, к которой часть системы может прибегнуть к непредвиденному поведению.
Работа должна быть выполнена с новым классом, который наследует объект Exception
и расширяет функциональность новым "выходом", который состоит из сигнала ошибки для пользователя и подпрограммы регистрации.
Возможно, мне нужно лучше понять использование throw
, но я хотя бы смог сделать его достаточно прозрачным, например:
public SomeObject GetVersion(byte p)
{
switch ((SomeObject)p)
{
case Version.SomeType1:
...
break;
case Version.SomeType2:
...
break;
default:
throw new UnexpectedQueryException(this.someOtherObject, errorCode);
}
return (SomeObject)p;
}
Я думаю, вы можете увидеть, что я пытаюсь сделать здесь,
Я пытаюсь выбросить, когда приложение не может обработать запрос.Бросок предназначен для выполнения выполнения через исключение (которое генерирует адекватный код ошибки для вызывающей стороны).Этот пример является ошибкой типа «Я знаю, что вы дали мне 9, но здесь разрешено только 1-8)», который errorCode отправляет дальше UnexpectedQueryException(...)
.
К сожалению, приложение принимает запрос как необработанный и закрывает мой поток, и приложение не будет работать до перезапуска.Помимо этого сценария, я также использую этот бросок в операторах catch.
На мой взгляд, это очень хорошо обрабатывается.
Какая лучшая практика здесь?
Я хочу, чтобы обработка исключений активировалась в разных сценариях (как выше), поэтому у меня всегда есть простой способ сообщить об ошибке пользователю (это означает, что я могу отправить очень точную информацию о том, гдеисключение).
Также я, конечно, хочу, чтобы приложение продолжало работать.
Часть кода из логики исключения,
public class UnexpectedQueryException: CommunicationException
{
public UnexpectedQueryException(SomeObject object, ErrorCode errorCode) : base("UnexpectedQueryException", object, errorCode)
{
.........
}
}
, которая, в свою очередь, наследует базовый объект исключения,
public class CommunicationException : Exception
{
..some fields..
public CommunicationException(string Message, SomeObject object, ErrorCode errorcode)
{
.....
}
public CommunicationException() : base("CommunicationException")
{ }
}