以下作品:
If 1=1
rdoYes.checked = True
Else
rdoNo.checked = True
End If
但是,以下情况不起作用:
IIF(1=1, rdoYes.checked = True, rdoNo.checked = True)
为什么会这样?
谢谢!
答案 0 :(得分:7)
确实“有效”;它只是没有做你想要的。
VB.NET中的 IIf
是一个函数(don't use it, ever, by the way),它接受以下参数:
Boolean
条件Object
True
Object
False
醇>
在您的使用中,您的病情为1 = 1
;那么你的另外两个参数是rdoYes.Checked = True
和rdoNo.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 ......自从我不得不编写代码以来已经超过十年了)