以下の作品:
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)
どうしてこれなの?
ありがとう!
それは「機能」します。それはあなたが望むことをしません。
IIfVB.NETでは、次のパラメータを取る関数です(ちなみに、使用しないでください):
Booleanチェックする条件Object条件がTrueObject場合は返品しますFalseあなたの使用法では、あなたの状態は次のとおりです1 = 1。次に、他の 2 つのパラメーターはrdoYes.Checked = TrueandでありrdoNo.Checked = True、どちらもVB コンパイラーの観点からの式です (したがって、実際には、単純なand とBoolean同等です)。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 は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年以上経ちました)