質問

最近質問したのですが、 IIf vs.もし そして、VBには別の関数があることを発見しました。 もし 基本的には以下と同じことをします IIf しかしショートです。

これはありますか もし 関数のパフォーマンスがより優れています IIf 関数?しますか? もし ステートメントは もし そして IIf 機能?

役に立ちましたか?

解決

くそー、ずっとオペレーターのこと言ってるのかと思ってた。;-) ともかく …

この 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

他のヒント

非常に重要な違いが 1 つあります IIf() そして If() それは一緒ですか Option Infer On 後者は、特定の場合に結果を同じデータ型に暗黙的にキャストします。 IIf 戻ります Object.

例:

    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 です。つまり、暗黙的に Nothing を Integer に変換します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top