Нулевой оператор объединения (??) с возвратом

Мне было интересно, почему это можно сделать в C# 7.0:

int? test = 0;
int test2 = test ?? throw new Exception("Error");

..но не это:

int? test = 0;
int test2 = test ?? return;

Кто-нибудь может это объяснить?

2 ответа

Решение

throw относительно недавно (в C# 7.0) был превращен в выражение, чтобы включить это. return не имеет - это всегда справедливое утверждение. ?? Оператор требует выражения, а не утверждения. Это был произвольный выбор дизайнеров C#, специально чтобы разрешить использование throw с ??,

Смотрите документацию на throw выражение

Ну, потому что никто не реализовал это таким образом. Или, точнее, потому что return это не выражение.

throw Раньше это был оператор только до C# 7.0, но затем был расширен (из-за предложения), чтобы быть также выражением (только операторы поддерживаются в операторе слияния null).

Так что если никто не предлагает сделать return выражение, это не сработает.

Другие вопросы по тегам