以下工作:

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

但是,以下内容无效:

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

为什么是这样?

谢谢!

有帮助吗?

解决方案

它确实是“工作”;它只是不做您想要的。

IIf 在vb.net中 功能 (不要使用它, 曾经, , 顺便一提),采用这些参数:

  1. 一种 Boolean 检查条件
  2. 一个 Object 如果条件是 True
  3. 不同的 Object 如果条件是 False

在您的用法中,您的病情是 1 = 1;那么您的其他两个参数是 rdoYes.Checked = TruerdoNo.Checked = True, , 两个都 Boolean 从VB编译器的角度来看(实际上,它们等同于更简单的表达式) rdoYes.CheckedrdoNo.Checked).

请记住,在vb.net中 = 标志是 只要 作业 如果是自己的线. 。这就是编译器如何区分诸如诸如的陈述 x = 5If 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 ...自从我必须在其中编码已经有十多年了)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top