0

以下の作品:

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

ただし、以下は機能しません。

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

どうしてこれなの?

ありがとう!

4

4 に答える 4

7

それは「機能」します。それはあなたが望むことをしません。

IIfVB.NETでは、次のパラメータを取る関数ですちなみに使用しないでください):

  1. Booleanチェックする条件
  2. Object条件がTrue
  3. 条件が異なるObject場合は返品します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)
于 2010-09-13T15:30:57.690 に答える
3

この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
于 2010-09-13T15:23:10.610 に答える
1

IIf式を取り、そのうちの 1 つの結果を返しますが、 は式ではないため、返すrdoYes.checked = Trueことができません。

于 2010-09-13T15:21:56.230 に答える
1

iifあなたが思っていることをしません-重要な部分はそれからのリターンなので、できるかもしれません:

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

(それが有効なVBかどうかはわかりません...コードを書かなければならなくなってから10年以上経ちました)

于 2010-09-13T15:26:13.983 に答える