Нулевой оператор объединения (??) с возвратом - PullRequest
0 голосов
/ 14 октября 2018

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

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

.. но не так:

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

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

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

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

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

Поэтому, если никто не предложит сделать return выражением, оно не будет работать.

0 голосов
/ 14 октября 2018

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

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

...