Нулевой оператор объединения (??) с возвратом
Мне было интересно, почему это можно сделать в 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
с ??
,
Ну, потому что никто не реализовал это таким образом. Или, точнее, потому что return
это не выражение.
throw
Раньше это был оператор только до C# 7.0, но затем был расширен (из-за предложения), чтобы быть также выражением (только операторы поддерживаются в операторе слияния null).
Так что если никто не предлагает сделать return
выражение, это не сработает.