为什么这不会作为IIF功能,但作为IF声明?

时间:2010-09-13 15:20:14

标签: asp.net vb.net asp.net-3.5 if-statement iif-function

以下作品:

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

但是,以下情况不起作用:

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

为什么会这样?

谢谢!

4 个答案:

答案 0 :(得分:7)

确实“有效”;它只是没有做你想要的。

VB.NET中的

IIf是一个函数don't use it, ever, by the way),它接受以下参数:

  1. 要检查的Boolean条件
  2. 如果条件为Object
  3. ,则返回True
  4. 如果条件为Object
  5. ,则返回不同的False

    在您的使用中,您的病情为1 = 1;那么你的另外两个参数是rdoYes.Checked = TruerdoNo.Checked = True,这两个Boolean表达式来自VB编译器的观点(所以,实际上,它们等同于更简单的rdoYes.Checked和{{ 1}})。

    请记住,在VB.NET中,rdoNo.Checked符号分配,如果它在自己的行。这就是编译器如何区分=x = 5等语句。

    这与您的问题没有直接关系,但您也应该知道If x = 5 Then已被弃用,您应该始终赞成IIf

    If

答案 1 :(得分:3)

IIF()函数将根据您为第一个参数输入的内容返回。由于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

答案 2 :(得分:1)

因为IIf接受表达式并返回其中一个的结果,并且rdoYes.checked = True不是表达式而且无法返回。

答案 3 :(得分:1)

iif没有做你认为它做的事 - 重要的部分是从它返回,所以你可以做到:

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

(我不确定这是有效的VB ......自从我不得不编写代码以来已经超过十年了)