Более чистый синтаксис для вызова функции при условии - PullRequest
0 голосов
/ 24 марта 2019

Я часто делаю следующие фрагменты

if(bar != null)
   foo(bar)     // That is, pass in object 'bar' to function 'foo' if bar is not null

РЕДАКТИРОВАТЬ: функция foo из API, и у меня нет доступа к ее коду. По сути, функция API ожидает ненулевой ввод.

Есть ли более чистый C # способ сделать это? Или я делаю что-то неправильное в архитектурном плане, если я часто этим занимаюсь?

Извиняюсь, если это повторение, я не могу найти правильные слова для поиска.

Я пытался использовать новый оператор объединения для достижения этой цели, но его нельзя использовать для вызова функции. Не уверен, что для этого можно использовать троичные операторы.

Я ожидаю, что будет один способ сделать это. Вроде как

bar ?? foo(bar) // That is run foo with bar when bar is not null.

Ответы [ 3 ]

1 голос
/ 24 марта 2019

Вы можете проверить значение null внутри метода foo:

void foo(object bar)
{
    if(bar == null) return;
    //your lines of code
}

, тогда вы можете просто запустить как:

foo(bar);
0 голосов
/ 24 марта 2019

я делаю что-то архитектурно некорректное, если я часто этим занимаюсь?

Возможно. Как правило, вы должны знать, могут ли ваши переменные быть нулевыми, и пропустить проверки. C # 8 вводит функцию, которая поможет вам объявить, проверить и применить, что ссылка не может быть нулевой: Типы ссылок Nullable .

0 голосов
/ 24 марта 2019

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

bar != null ? foo(bar) : * ;

, где на * вы вставите оператор, который хотите выполнить, если bar == null.

...