【发布时间】:2014-08-01 00:35:15
【问题描述】:
我正在尝试使用速记运算符来检查条件以引发异常。
throw (result == false) ? new Exception("Result is false.") : null;
上一行之后的行,我收到“检测到无法访问的代码错误”。
我在想,如果不满足条件,我“抛出null”,它仍然抛出异常。
有没有更好的方法来做这个短手?
【问题讨论】:
-
为什么要做三元运算呢?只需使用
if (Result == false) throw...。当您发现自己难以使某些东西适合三元运算符时,通常意味着您一开始就不应该使用它。 -
FWIW,您可以创建一个包含类似
throw arg == null ? new ArgumentNullException() : new ArgumentException(); // To do: Implement function.的存根函数。之后的任何代码肯定无法访问。除了稍后被有用代码替换的存根之外,这似乎不是一个好主意。 -
@HABO 抛出的辅助函数的问题是它们最终会出现在堆栈跟踪中,这会在以后混淆错误的来源。
-
我想补充一下@KenWhite 的回答:您需要知道何时使用它。当然,最好避免写
if/else语句,但它会损害代码的可读性。这不是 JavaScript 的字符数很重要(下载较小的文件),所以更喜欢专注于代码可读性而不是节省几个字节,也许是我的一秒钟时间。我总是尝试编写我的代码以供其他人阅读(遵守编码约定、评论/记录……),即使我独自工作时也是如此。我建议你也这样做。一旦开始与一群程序员一起工作,适应起来也会容易得多。 -
@Blorgbeard - 我没有想到辅助函数。我正在考虑粗化一个类并希望在函数体中放入一些东西,很快就会被函数代码替换,这比
// TODO注释要多一些。在这种情况下,总是抛出异常,以便您知道在检查空参数时遇到了尚未实现的东西。更适合throw new NotImplementedException("Try again soon." + (arg == null ? " fyi: arg was null." : ""));。
标签: c# error-handling