以下の作品:
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
。次に、他の 2 つのパラメーターはrdoYes.Checked = True
andでありrdoNo.Checked = True
、どちらもVB コンパイラーの観点からの式です (したがって、実際には、単純なand とBoolean
同等です)。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)
このIIF()
関数は、最初のパラメーターに入力した内容に基づいて何かを返します。=
VB.Net はas in assignment と=
as in comparison (他の多くの言語) で違いがないため==
、2 番目のステートメントはあいまいです。
これは、レイト バインディング (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
式を取り、そのうちの 1 つの結果を返しますが、 は式ではないため、返すrdoYes.checked = True
ことができません。
iif
あなたが思っていることをしません-重要な部分はそれからのリターンなので、できるかもしれません:
iif(1=1, rdoYes, rdoNo).checked = True
(それが有効なVBかどうかはわかりません...コードを書かなければならなくなってから10年以上経ちました)