В настоящее время я пытаюсь реструктурировать свою программу, чтобы она была более понятной и лучше реализовывала известные шаблоны и т. Д.
У меня довольно много вложенных IF-операторов и я хочу от них избавиться. Как я могу пойти по этому поводу? Мой первый подход состоял в том, чтобы сделать это с исключениями, например,
public static Boolean MyMethod(String param) {
if (param == null)
throw new NullReferenceException("param may not be null");
if (param.Equals("none") || param.Equals("0") || param.Equals("zero"))
throw new ArgumentNullException("param may not be zero");
// Do some stuff with param
// This is not executed if param is null, as the program stops a soon
// as one of the above exceptions is thrown
}
Этот метод используется в основном классе приложения, например,
static void Main() {
try {
Boolean test = MyClass.MyMethod(null); // Will throw an exception
} catch (Exception ex) {
MessageBox.Show(ex.Message, "Error");
}
Я думаю, что это довольно хорошо, так как предотвращает вложенные операторы, и почти все действия методов хорошо расположены на одном уровне.
Как и в случае IF-операторов, метод будет выглядеть следующим образом
public Boolean MyMethod(String param) {
if (param != null) {
if (!param.Equals("none") && !param.Equals("0") && !param.Equals("zero")) {
// Do some stuff with param
} else {
MessageBox.Show("param may not be zero", "Error");
} else {
MessageBox.Show("param may not be null", "Error");
}
}
Что я нахожу очень, очень уродливым и трудно поддерживать.
Теперь вопрос в том, этот подход хорошо ? Я знаю, что это может быть субъективно, но как вы преодолеваете вложенные IF (1 или 2 уровня не так уж и плохо, но после этого становится хуже ...)