以下作品:
If 1=1
rdoYes.checked = True
Else
rdoNo.checked = True
End If
但是,以下方法不起作用:
IIF(1=1, rdoYes.checked = True, rdoNo.checked = True)
为什么是这样?
谢谢!
以下作品:
If 1=1
rdoYes.checked = True
Else
rdoNo.checked = True
End If
但是,以下方法不起作用:
IIF(1=1, rdoYes.checked = True, rdoNo.checked = True)
为什么是这样?
谢谢!
它确实“工作”;它只是不做你想做的事。
IIf
在 VB.NET 中是一个函数(永远不要使用它) ,它采用以下参数:
Boolean
条件Object
条件是则返回True
Object
如果条件是,则返回不同False
在您的使用中,您的条件是1 = 1
;那么你的另外两个参数是rdoYes.Checked = True
and rdoNo.Checked = True
,从 VB 编译器的角度来看这两个Boolean
表达式(所以,实际上,它们等同于更简单的rdoYes.Checked
and 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)
该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
因为IIf
接受表达式并返回其中一个的结果,并且rdoYes.checked = True
不是表达式并且不能返回。
iif
没有做你认为它做的事情——重要的是从中获得回报,所以你可以这样做:
iif(1=1, rdoYes, rdoNo).checked = True
(我不确定这是有效的 VB ......自从我不得不在其中编码以来已经有十多年了)