【问题标题】:C#. Is this a valid conditional statement?C#。这是一个有效的条件语句吗?
【发布时间】:2011-02-18 13:50:44
【问题描述】:

我有两种方法,AB。只有在两个方法成功后我才必须插入到数据库中。那么这是 C# 中的有效条件语句吗?

if (A() && B())
{
    //insert into db
}

在方法A 执行后,我必须执行B。如果两者都成功,我必须进行插入。

【问题讨论】:

  • 真的.. 是的,这很好,但这真的很容易在几秒钟内测试。
  • 现在人们使用 SO 而不是调试器。

标签: c# methods conditional execution


【解决方案1】:

是的,它是有效的。但请注意,B 只有在 A() 返回 true 时才会执行。

【讨论】:

    【解决方案2】:

    应该是

    if(A()) 
    { 
       if(B())
       {
        //insert into db 
       }
    } 
    

    这将确保两个函数都被执行。

    【讨论】:

    • 为什么要注意这两个函数都被执行了?如果A()失败了,那么B()就不会被执行,所以和问题里的代码一模一样。
    【解决方案3】:

    这叫short-circuit evaluation

    条件将按照出现的顺序进行评估,并且仅当它们的测试仍然相关时。也就是说,如果 A() 失败,则没有理由测试 B()。

    【讨论】:

      【解决方案4】:

      正如他们所说,如果 A() 返回 false,则 B() 不会执行。 如果您希望执行这两个功能,我建议您执行以下操作:

      bool resultA = A();
      bool resultB = B();
      if(resultA && resultB)
      {
          //insert into db
      }
      

      【讨论】:

      • -1 用于在您不想短路的情况下使用 && 运算符。
      • 这个例子显然没有短路这个例子所展示的功能
      【解决方案5】:

      在两个函数中设置 fa=1 fd=1。

      然后检查

      如果(fa==fb==1) { //做 }

      【讨论】:

      • 说真的老兄?这真是丑陋的代码。您甚至希望他实例化两个全局变量,而不是使用返回值来处理这种微不足道的事情?...叹息!如果方法内部出现问题,它应该被外部的 try catch 捕获。
      【解决方案6】:

      其他人已经回答了您的问题,但只是为了澄清一下,因为这里有一些稍微误导性的帖子......

      && 运算符短路

      if (false && Foo()) // Foo() is not run

      & 运算符没有短路

      if (false & Foo()) // Foo() is run

      如果您的函数具有您想要确保的副作用,请使用后者。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-04
        • 1970-01-01
        • 2016-06-10
        • 1970-01-01
        • 1970-01-01
        • 2011-07-30
        • 1970-01-01
        相关资源
        最近更新 更多