代码之家  ›  专栏  ›  技术社区  ›  Curtis stepd

为什么它不能作为一个IIF函数工作,而是作为一个if语句工作?

  •  0
  • Curtis stepd  · 技术社区  · 14 年前

    以下工作:

    If 1=1
        rdoYes.checked = True
    Else
        rdoNo.checked = True
    End If
    

    但是,以下内容不起作用:

    IIF(1=1, rdoYes.checked = True, rdoNo.checked = True)
    

    这是为什么?

    谢谢!

    4 回复  |  直到 14 年前
        1
  •  7
  •   Community Egal    7 年前

    它能“工作”;只是不能做你想做的。

    IIf 在vb.net中是 功能 ( don't use it, ever , by the way ,采用以下参数:

    1. Boolean 要检查的条件
    2. Object 如果条件是 True
    3. 不同的 对象 如果条件是 False

    在你的使用中,你的情况是 1 = 1 ;那么您的另外两个参数是 rdoYes.Checked = True rdoNo.Checked = True ,两者 布尔值 从VB编译器的角度来看,表达式(因此,实际上,它们相当于 rdoYes.Checked rdoNo.Checked )

    记住在vb.net中, = 标志是 只有 任务 如果它在自己的线上 . 这就是编译器如何区分诸如 x = 5 If x = 5 Then .

    这与你的问题没有直接关系,但你也应该意识到 IIF 被否决,你应该 总是 赞成 If 相反:

    ' Let us just suppose it made sense to write this: '
    ' Notice the If instead of IIf. '
    Dim result = If(1 = 1, rdoYes.Checked, rdoNo.Checked)
    
        2
  •  3
  •   Jan Jongboom    14 年前

    这个 IIF() 函数will 返回 基于为第一个参数输入的内容。因为vb.net在 = 如转让和 = 相比之下( == 在许多其他语言中,第二个语句是含糊不清的。


    使用后期绑定(vb.net中的委托)可以做到这一点:

    (Function(c) InlineAssignHelper(c.Checked, true)).Invoke(IIf(1 = 1, chkYes, chkNo))
    
      Private Function InlineAssignHelper(Of T)(ByRef target As T, ByVal value As T) As T
        target = value
        Return value
      End Function
    
        3
  •  1
  •   wRAR    14 年前

    因为 IIf 获取表达式并返回其中一个表达式的结果,以及 rdoYes.checked = True 不是表达式,无法返回。

        4
  •  1
  •   Joe    14 年前

    iif 不做你认为它做的事——重要的是从中得到回报,所以你可能能够做到:

    iif(1=1, rdoYes, rdoNo).checked = True
    

    (我不确定这是有效的vb…我已经有十多年没有在里面编码了)