4

私は奇妙な問題を抱えています。配列を操作しているときにIIfが混乱しています。どうやらそれはアクティブ化されていなくても私のelseステートメントをチェックしています。この問題を示すコードは次のとおりです。

'works
 Dim test As String = "bleh"
 If values.Length < 6 Then
   test = "200"
 Else
   test = values(5)
 End If

 'throws indexoutofrange exception
 Dim itemLimit As String = IIf(values.Length < 6, "200", values(5))
4

2 に答える 2

9

Iifオペレーターは短絡を実装せず、true と false の両方のケースを評価します。短絡バージョンが必要な場合は、 を使用しますIf

Dim itemLimit As String = If(values.Length < 6, "200", values(5))
于 2011-03-30T23:18:32.610 に答える
1

この記事をご覧ください: http://www.fmsinc.com/free/newtips/net/nettip33.asp

記事から:

Visual Basic、VBA、および Visual Basic .NET は、If...Then...Else ステートメントの代わりに IIF 関数をサポートしています。これはショートカットのように思えるかもしれませんが、IIF の機能は If...Then...Else とは異なります。

IIF は、引数を準備するときにステートメント全体を評価する必要があるため、望ましくない副作用が生じる可能性があります。

つまり、条件が失敗した場合、句が評価されないIf...Then...Elseため、機能します。Else一方IIf、 はすべてのステートメントを評価するため、IndexOutOfBounds例外が発生します。

于 2011-03-30T23:16:06.243 に答える