【发布时间】:2019-10-30 00:11:54
【问题描述】:
鉴于此工作代码:
if (!this.TryParse()) throw new Exception();
// or
if (this.Parse() == null) throw new Exception();
由于 C# 7 已经知道 throw 表达式 与 ?? 和 ?:,我想知道是否(或为什么不)有一种方法可以将其写为“true or throw”或 C# 中的“非空或抛出”语句,类似于 JavaScript 或 PHP 等其他语言所允许的。这是我尝试过的:
// COMPILE ERROR:
this.TryParse() || throw new Exception();
this.Parse() ?? throw new Exception();
_ = this.TryParse() || throw new Exception();
// WORKS:
_ = this.TryParse() ? 0 : throw new Exception();
_ = this.Parse() ?? throw new Exception();
特别是,为什么_ = <obj> ?? <throw> 有效而_ = <bool> || <throw> 无效?
我为什么要这样做?纯粹的可读性:我想保持主要目的是做而不是测试的方法作为调用语句在行的开头清晰可见,而不是在 if 条件中隐藏它们。以 PHP 为例:
mysql_connect(...)
OR die();
【问题讨论】:
-
Exception>trigger_error>die
标签: c# expression throw