Элегантная проверка на 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();
