11

最近、 IIf と Ifについて質問したところ、VB にはIfと呼ばれる別の関数があり、基本的にIIfと同じことを行いますが、ショート サーキットであることがわかりました。

このIf関数はIIf関数よりも優れたパフォーマンスを発揮しますか? IfステートメントはIfおよびIIf関数よりも優先されますか?

4

2 に答える 2

14

くそー、私はあなたがずっとオペレーターについて話していると思っていました。;-)とにかく…</p>

この If 関数は IIf 関数よりも優れたパフォーマンスを発揮しますか?

絶対。言語に組み込まれていることを忘れないでください。2 つの条件付き引数のうち 1 つだけを評価する必要があるため、コストのかかる操作を節約できる可能性があります。

If ステートメントは If および IIf 関数よりも優先されますか?

やってる事が違うから比べようがないんだと思う。コードが代入を意味的に実行する場合は、意思決定ではなく、これを強調する必要があります。Ifここではステートメントの代わりに演算子を使用します。これは、変数の初期化で使用できる場合に特に当てはまります。そうしないと、変数がデフォルトで初期化され、コードが遅くなるからです。

Dim result = If(a > 0, Math.Sqrt(a), -1.0)

' versus

Dim result As Double ' Redundant default initialization!
If a > 0 Then
    result = Math.Sqrt(a)
Else
    result = -1
End If
于 2008-08-26T16:10:32.827 に答える
3

IIf()との間の非常に重要な違いの 1 つIf()は、後者では、 whereが を返すOption Infer Onように、場合によっては結果を同じデータ型に暗黙的にキャストすることです。 IIfObject

例:

    Dim val As Integer = -1
    Dim iifVal As Object, ifVal As Object
    iifVal = IIf(val >= 0, val, Nothing)
    ifVal = If(val >= 0, val, Nothing)

出力:
iifVal Nothing の値を持ち、Object の型
ifValは 0 の値と Integer の型を持ちます。b/c 暗黙的に Nothing を Integer に変換しています。

于 2014-04-30T18:45:41.627 に答える