4

vb.netでIIFを使用しようとしています。これが私のコードです

Dim arr as new MyClass("ABC")
MyAnotherMethod(IIf(arr.SelectedValue.Count < 1, Nothing, arr.SelectedValue(0).Value),"xxx","yyy","zzz")

上記の IIF は真の部分に実行されますが、このコードを実行した後、次のメッセージが表示されました。

インデックスが配列の範囲外だった。

本当の部分を実行する必要があるのに、arr.SelectedValue(0).Value が IIF に渡されたため、false の部分がまだ参照されていることが原因だと思います。

「andalso」のような、私の場合に適したロジックはありますか? 偽の部分を実行しないようにするため。

どうもありがとう!

4

2 に答える 2

9

IIF関数の代わりにIF演算子を使用する必要があります

「3 つの引数で呼び出される If 演算子は、短絡評価を使用することを除いて、IIf 関数のように機能します」

また、IIF はタイプ セーフではありませんが、これを実際に使用する必要があります。これらの実例を見て​​ください:

    Dim i As Integer

    'compiles if option strict is off (this is bad)
    i = IIf(True, "foo", 4) 

    'compiles even if option strict on, but results in a runtime error (this is even worse)
    i = CInt(IIf(True, "foo", 4)) 

    'won't compile (this is good because the compiler spotted the mistake for you)
    i = If(True, "foo", 4) 
于 2012-07-18T10:04:42.810 に答える
0
于 2012-07-18T10:06:44.913 に答える