【问题标题】:One line if in VB .NET如果在 VB .NET 中,则为一行
【发布时间】:2010-10-20 18:05:00
【问题描述】:

是否可以在 VB .NET 中执行一行 if 语句?如果有,怎么做?

【问题讨论】:

  • 小心 IIf 操作符 - 它并不总是 short-circuited 并且真假表达式都会被计算。
  • 我实际上认为 IIF 从不短路
  • IFF 与 If 相比有什么优势——甚至目的是什么?
  • @LeoKing 向后兼容 VB6。 VB.NET 中引入了单“I”IF,而之前存在双“I”IIF。而且我不相信 VB6 的任何部分都支持短路评估。

标签: vb.net conditional-operator


【解决方案1】:

使用 IF()。

它是一个短路三元运算符。

Dim Result = IF(expression,<true return>,<false return>)

另见:

【讨论】:

  • 请注意,可能存在隐式类型转换。例如:如果 x 不包含值,If(x.HasValue, x.Value, Nothing) 将返回 0。一种补救方法是强制将值设置为 Nullable,如下所示:If(x.HasValue, CType( x.Value, Nullable( of Integer) ), Nothing)
  • @LosManos 仅供参考,您得到结果的原因如下:如果x 的类型为Integer?,那么x.Value 的类型为Integer,而不是Integer?。所以编译器正确地将Nothing转换为Integer(以匹配另一个结果),导致0。只是解释编译器的行为;你所做的就是你想要的一个很好的解决方案。另一种解决方案是将 Nothing 转换为所需的类型,例如DirectCast(Nothing, Integer?).
  • 你是说If在返回ExpressionIfFalse时检查ExpressionIfTrue返回的类型?
【解决方案2】:

其实很简单..

If CONDITION Then ..INSERT CODE HERE..

【讨论】:

  • 是的。尽管我讨厌这一点,但将If...Then...Else... 语句放在一行是可能的。但是,当您将它与使用冒号将多个语句放在一行中时请注意。语句If &lt;condition&gt; Then &lt;action1&gt; : &lt;action2&gt; 只会结合action 1 执行action2! Action2 本身并不是一个单独的语句!因此,为了清楚起见,我建议始终使用块语句并完全避免使用冒号。
【解决方案3】:

单行

语法:

If (condition) Then (do this)

例子:

If flag = true Then i = 1

多个 ElseIf

语法:

If (condition) Then : (do this)
ElseIf (condition2) Then : (do this)
Else : (do this)
End If

或

If (condition) Then : (do this) : ElseIf (condition2) Then : (do this) : Else : (do this) : End If

多重操作

语法:

If (condition) Then : (do this) : (and this) : End If

【讨论】:

    【解决方案4】:

    您可以在 VB 的单行 if 语句中使用多条语句和 else 语句,这可能会让纯粹的程序员和 c# 程序员感到畏缩。在本例中,y 以 3 而不是 7 结尾。

    i = 1
    If i = 1 Then x = 3 : y = 3 Else x = 7 : y = 7
    

    【讨论】:

    • @BrianWebster 不错。我讨厌它。 :)
    【解决方案5】:

    或者

    IIf(CONDITION, TRUE_ACTION, FALSE_ACTION)
    

    【讨论】:

    • 这是一个表达式,而问题要求一个陈述。 ;-)
    • IIf 与 If 语法相同的缺点是IIf 更容易出现run-time errors。
    【解决方案6】:

    只需添加Then:

    If A = 1 Then A = 2
    

    或:

    If A = 1 Then _
        A = 2
    

    【讨论】:

      【解决方案7】:

      单行“If 语句”

      比你想象的要容易,注意到没有人投入我所拥有的东西,所以我会投入 2 美分。

      在我的测试中你不需要continuation? semi-colon,你可以不用,也可以不用End If。

      &lt;C#&gt; = Condition.

      &lt;R#&gt; = True Return.

      &lt;E&gt; = Else Return.

      单一条件

      If <C1> Then <R1> Else <E>
      

      多重条件

      If <C1> Then <R1> Else If <C2> Then <R2> Else <E>
      

      无限?条件

      If <C1> Then <R1> Else If <C2> Then <R2> If <C3> Then <R3> If <C4> Then <R4> Else...
      ' Just keep adding "If <C> Then <R> Else" to get more
      

      -不确定如何格式化以使其更具可读性,所以如果有人可以提供编辑,请做-

      【讨论】:

        【解决方案8】:
        If (X1= 1) Then : Val1= "Yes" : Else : Val1= "Not" : End If
        

        【讨论】:

          【解决方案9】:

          你也可以使用 IIf 函数:

          CheckIt = IIf(TestMe > 1000, "Large", "Small")
          

          【讨论】:

            【解决方案10】:

            在 VB.NET 代码中使用简单

            基本语法 IIF(Expression as Boolean,True Part as Object,False Part as Object)As Object

            1. 使用与三元相同的 IIF
            2. 将 myVariable 调暗为 string= " "
            3. myVariable = IIf(条件,真,假)

            【讨论】:

              【解决方案11】:
              If (condition, condition_is_true, condition_is_false)
              

              在更长的版本中看起来像这样:

              If (condition_is_true) Then 
              
              Else (condition_is_false)
              
              End If
              

              【讨论】:

                猜你喜欢
                • 2016-05-27
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-02-24
                • 1970-01-01
                • 2014-07-02
                • 1970-01-01
                相关资源
                最近更新 更多