【问题标题】:if (true) Shorthandif (true) 速记
【发布时间】:2014-05-21 16:58:00
【问题描述】:

检查布尔值是否为真时是否有简写?
示例:

if (autoConnect) Connect();

我们可以的

return IsOpen() ? true : false;

但我不能得到

autoConnect ? Connect();  

正在运行。有没有办法做到这一点?

【问题讨论】:

  • if(autoConnect) Connect(); 是执行此操作的最短方法。无论如何,您提出的解决方案并没有真正节省多少。
  • 简单的答案是:不。
  • “我无法运行” 您是否发布了您收到的确切错误消息?你描述了问题吗?它是在编译时失败,还是在运行时失败?
  • 现在一天的磁盘很便宜。这三个字符不会为您节省太多!所以开始思考如何编写可读的代码。我从不写没有大括号的 if 语句,即使它是单行的。

标签: c# operators shorthand shorthand-if


【解决方案1】:

你可以写一个扩展方法:

public static void _(this bool b, Action ifTrue)
{
    if (b) { ifTrue(); }
}

那么你可以写:

autoConnect._(Connect);

虽然显然这不是很可读,不推荐。

【讨论】:

  • 这是我最近看到的更奇怪的事情之一 :-)
  • 我喜欢这个!你也可以有一个 Connect.if(autoConnect) 来进一步混淆人们:)
  • 您也可以将autoConnect 变量重命名为a 以节省更多磁盘空间,并将连接方法重命名为C :p
【解决方案2】:

您唯一可以缩短的就是删除conditional operator

return IsOpen() ? true : false;

只是

return IsOpen();

【讨论】:

    【解决方案3】:

    不,没有办法让autoConnect ? Connect(); 工作。

    只返回布尔值,不需要ternary operator:

    return IsOpen(); 
    

    或者,当您要测试的值可以为空时,您可以使用?? 运算符返回一些值,例如:

     return a ?? b;
    

    如果a 为空,则返回b

    【讨论】:

      【解决方案4】:

      要回答你的问题,不,没有速记

      if (autoConnect) Connect();
      

      任何更短的。此外,您提出的解决方案仅节省了 3 个字符,这对于原本完全可读的代码来说是不必要的。

      【讨论】:

        【解决方案5】:

        正如 siride 所说,if (autoConnect) Connect(); 是最短的方法。不过,这只是在编写代码时。每当编译器编译代码时,它将变得与使用if (autoConnect) { Connect(); }if (autoConnect == true) { Connect(); } 相同。

        你应该使用你认为最干净或最容易阅读的任何东西。

        【讨论】:

          猜你喜欢
          • 2014-06-14
          • 1970-01-01
          • 2012-09-12
          • 2013-07-18
          • 2011-07-17
          • 2016-10-06
          • 2014-07-16
          • 1970-01-01
          • 2014-08-08
          相关资源
          最近更新 更多