Элегантная проверка на ноль и выход в C # - PullRequest
6 голосов
/ 14 марта 2010

Что такое элегантный способ написать это?

if (lastSelection != null)
{
    lastSelection.changeColor();
}
else
{
    MessageBox.Show("No Selection Made");
    return;
}

changeColor() - это функция void, а функция, выполняющая вышеуказанный код, также является функцией void.

Ответы [ 7 ]

14 голосов
/ 14 марта 2010

Вы можете уменьшить беспорядок, изменив условие:

if (lastSelection == null)
{
    MessageBox.Show("No Selection Made");
    return;
}

lastSelection.changeColor();
9 голосов
/ 14 марта 2010

Хотя мне лично очень не нравится иметь несколько возвращаемых операторов в функции, в соответствии с защитным программированием, которое я видел, вы перехватываете состояние ошибки и выходите и пропускаете что-либо еще:

if(lastSelection == null)
{
    MessageBox.Show("No Selection Made");
    return;
}

lastSelection.changeColor();

Трудно сказать, как бы я делал это в своей работе, не видя всей функции, к которой он относится.

2 голосов
/ 14 марта 2010

Я хотел бы убедиться, что lastSelection никогда не будет нулевым, и иметь указатель на «пустой» объект в тех случаях, когда он будет нулевым в текущем проекте. Тогда нет необходимости в нулевой проверке. Разработка возможных ошибок вне системы - это всегда хорошая практика.

IOW, я бы спросил, является ли неравенство в коде тем, как вы делаете нулевую проверку, или это тот факт, что нулевая проверка требуется вообще .

1 голос
/ 14 марта 2010

Это еще один способ реализации этого.

        Action _action = (lastSelection != null
                              ?
                                  new Action(lastSelection.changeColor)
                              :
                                  () => Console.WriteLine("No Selection Made"));
        _action.Invoke();

Возможно, это немного излишне, но вы наверняка заставите людей, поддерживающих ваш код, почесать голову: -)

1 голос
/ 14 марта 2010

Видя, что все получили хорошие ответы, НЕ делайте этого :

if (lastSelection == null) goto ERR;
lastSelection.changeColor();
//... possibly more stuff...
return;
ERR:
MessageBox.Show("No Selection Made");
0 голосов
/ 14 марта 2010

Практика быстрого разгона - сначала написать ноль, как показано ниже:


if (null == lastSelection)
{
    MessageBox.Show("No Selection Made");
    return;
}

lastSelection.changeColor();

0 голосов
/ 14 марта 2010

Я думаю, что ваш код хорош: сначала вы проверили нормальный регистр (lastSelection != null), а затем ненормальный.

Я могу просто добавить одну модификацию:

if (lastSelection != null)
{
    lastSelection.changeColor();
    //your other normal code
}
else
{
    MessageBox.Show("No Selection Made");
    //return; //no need for this now
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...