Элегантная проверка на null и выход в C#
что такое элегантный способ написания этого?
if (lastSelection != null)
{
lastSelection.changeColor();
}
else
{
MessageBox.Show("No Selection Made");
return;
}
changeColor()
является функцией void, и функция, которая выполняет приведенный выше код, также является функцией void.
7 ответов
вы можете уменьшить беспорядок, изменив условие:
if (lastSelection == null)
{
MessageBox.Show("No Selection Made");
return;
}
lastSelection.changeColor();
хотя я лично очень не люблю иметь несколько операторов return в функции, согласно оборонительному программированию, которое я видел, вы поймаете условие ошибки и выйдете, и пропустите что-нибудь еще:
if(lastSelection == null)
{
MessageBox.Show("No Selection Made");
return;
}
lastSelection.changeColor();
трудно сказать, как я бы сделал это в своей собственной работе, не видя всей функции, к которой это относится.
Я бы соблазнился, чтобы убедиться, что lastSelection
никогда не было null, и он указывает на "пустой" объект в случаях, когда он будет null в текущем дизайне. Тогда нет необходимости в нулевой проверке. Технических ошибок из системы это всегда хорошая практика.
IOW, я бы спросил, является ли неэлегантность в коде тем, как вы выполняете проверку null, или это тот факт, что проверка null требуется вообще.
видя, что все остальные получили хорошие ответы,Не делай этого:
if (lastSelection == null) goto ERR;
lastSelection.changeColor();
//... possibly more stuff...
return;
ERR:
MessageBox.Show("No Selection Made");
Это еще один способ реализации этого.
Action _action = (lastSelection != null
?
new Action(lastSelection.changeColor)
:
() => Console.WriteLine("No Selection Made"));
_action.Invoke();
возможно, немного перебор, но у вас наверняка будут люди, поддерживающие ваш код, почесывая головы : -)
Я думаю, что ваш код хорош: вы проверили на нормальный случай (lastSelection != null)
сначала для ненормального случая.
Я могу просто добавить одну модификацию:
if (lastSelection != null)
{
lastSelection.changeColor();
//your other normal code
}
else
{
MessageBox.Show("No Selection Made");
//return; //no need for this now
}
практика догоняет быстро, чтобы написать null сначала, как показано ниже:
if (null == lastSelection)
{
MessageBox.Show("No Selection Made");
return;
}
lastSelection.changeColor();