Изящная проверка на пустой указатель и выход в C#

Что такое изящный способ записать это?

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

changeColor() пустая функция и функция, которая работает, вышеупомянутый код является пустой функцией также.

6
задан alain.janinm 30 April 2012 в 20:50
поделиться

7 ответов

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

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

lastSelection.changeColor();
14
ответ дан 8 December 2019 в 03:52
поделиться

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

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

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

1
ответ дан 8 December 2019 в 03:52
поделиться

Практика, которая быстро набирает обороты, состоит в том, чтобы сначала записать null, как показано ниже:


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

lastSelection.changeColor();

0
ответ дан 8 December 2019 в 03:52
поделиться

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

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

lastSelection.changeColor();

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

9
ответ дан 8 December 2019 в 03:52
поделиться

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

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

if (lastSelection != null)
{
    lastSelection.changeColor();
    //your other normal code
}
else
{
    MessageBox.Show("No Selection Made");
    //return; //no need for this now
}
0
ответ дан 8 December 2019 в 03:52
поделиться

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

if (lastSelection == null) goto ERR;
lastSelection.changeColor();
//... possibly more stuff...
return;
ERR:
MessageBox.Show("No Selection Made");
1
ответ дан 8 December 2019 в 03:52
поделиться

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

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

2
ответ дан 8 December 2019 в 03:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: