Очевидный ответ: «потому что они не указали это таким образом».Сводная информация о выражении броска может быть найдена здесь .Я думаю, мы можем только догадываться почему, но на самом деле я думаю, что это имеет смысл.Кажется, что все новые возможности языка соответствуют этой единственной цели: уметь писать код более функционально.Давайте рассмотрим ваш пример разбора:
var parsed = Parse() ?? throw new Exception();
Чтобы записать это без выражения броска, вам нужно либо дважды оценить Parse
, либо дважды записать переменную parsed
для одной цели.
if (Parse() == null) throw new Exception();
var parsed = Parse();
и
var parsed = Parse();
// variable `parsed` can be null at this point
if (parsed == null) throw new Exception();
// variable `parsed` cannot be null anymore, the type of the variable is essentially mutated
Таким образом, первые два примера просты: написание this.TryParse() || throw new Exception();
вместо if (!this.TryParse()) throw new Exception();
будет буквально одним и тем же во всех аспектах.Так зачем вводить новый синтаксис для той же концепции, для которой у нас уже есть такой?Помните принципы разработки языка Python:
There should be one-- and preferably only one --obvious way to do it.
Последний пример более сложный.Заявление var a_non_false = this.TryParse() || throw new Exception();
синтаксически очень похоже на var a_non_null = this.Parse() ?? throw new Exception();
, однако я утверждаю, что есть большая разница.Переменная a_non_false
по сути является просто true
константой (как если бы она была ложной, мы уже сгенерировали исключение), поэтому мы могли бы просто заменить a_non_false
на true
в остальной части функции и получить то же поведение.
Что касается части _ =
, я вижу, что это другая проблема.Интересно, почему они не запрещали использование переменных отбрасывания в таких простых назначениях.Я бы определенно не стал использовать их для замены классического управления потоком.
Итак, в заключение, сначала эти проектные решения выглядят произвольно, но после второй мысли они выглядят более продуманными.