Как повторно использовать код, генерирующий исключение, для возврата логического значения? - PullRequest
0 голосов
/ 14 декабря 2010

Допустим, у меня есть блок операторов if, которые выдают исключение, если условие истинно. Как я могу создать метод, который использует те же условия, но возвращает true или false вместо того, чтобы выдавать исключения. т. е. если выброшено исключение, вернуть false; если исключение не выдается, вернуть true. Я хочу использовать как можно больше кода.

Я также хотел бы попытаться не перехватывать все исключения, которые я выбрасываю.

редактировать: извините за опечатки

Ответы [ 2 ]

2 голосов
/ 14 декабря 2010

Переместите код в функцию, которая возвращает логическое значение, затем измените исходную функцию, чтобы она вызывала новую, и сгенерируйте исключение, если она возвращает false.

0 голосов
/ 15 декабря 2010

Пусть общий код принимает делегат, который будет вызываться при возникновении плохого состояния (возможно, функция, которая возвращает false). Тогда:

  if (SomethingBadHappened)
    return ReportSomethingBad(new ImNotFeelingWellException("I'm not feeling too well..."));

Версия подпрограммы "TryDoingSomething" (которая должна возвращать False, а не генерировать исключение) должна вызывать общую версию с делегатом, который ничего не делает, кроме как возвращает false. Версия «DoSomethingAndThrowExceptionIfItFails» должна вызывать общую процедуру с делегатом, который будет выдавать переданное исключение.

Выполнение таких действий позволит исключениям содержать гораздо больше полезной информации, чем было бы возможно, если бы они были просто сгенерированы подпрограммой TryDoingSomething (), которая вернула false.

...