【问题标题】:Is it possible to throw an exception using short hand condition operator? c#是否可以使用简写条件运算符引发异常? C#
【发布时间】: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


【解决方案1】:

据我所知,您不能这样做,因为您 throw 处理异常或空值,无论哪种情况,下面的代码始终无法访问。您可以简单地在一行中执行此操作:

if (!result) throw new Exception("Result is false.");

这甚至最终变成了输入较少的字符

【讨论】:

  • 标记为答案。最简单的答案总是在你面前。这么晚了,我的脑力正在减少:|
猜你喜欢
  • 2020-10-13
  • 2010-12-18
  • 2018-06-12
  • 2021-10-15
  • 2013-04-21
  • 1970-01-01
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多