1

コードをhttps://stackoverflow.com/questions/4554014/how-to-examine-and-manipulate-iis-metadata-in-cからVBVcriptに変換しようとしています。

私の問題はこのコードにあります:

Function LocateVirtualDirectory(ByVal siteName, ByVal vdirName)
    On Error Resume Next
    Dim site
    For Each site in w3svc
        If (site.KeyType = "IIsWebServer") And (site.ServerComment = siteName) Then
            Set LocateVirtualDirectory = GetObject(site.Path & "/ROOT/" & vdirName)
            Exit Function
        End If
    Next
End Function

の場合、ブール式全体が値を受け取りますが、これsite.ServerCommentはFalseではないため、thenステートメントが入力されます。EmptyEmpty

その式を書く正しい方法は何ですか?短いほど良いです。

ありがとう。

4

1 に答える 1

3

ステートメントをネストIfし、の条件を防ぐために追加のチェックを挿入しServerCommentますEmpty。また、プロパティに2回アクセスしないように、の値をsite.ServerComment一時変数に抽出しました。comment

例えば:

Function LocateVirtualDirectory(ByVal siteName, ByVal vdirName)
    On Error Resume Next
    Dim site
    Dim comment
    For Each site in w3svc
        If site.KeyType = "IIsWebServer" Then
            comment = site.ServerComment
            If (comment <> Empty) And (comment = siteName) Then
                Set LocateVirtualDirectory = GetObject(site.Path & "/ROOT/" & vdirName)
                Exit Function
            End If
        End If
    Next
End Function

Ifステートメントをネストすることのもう1つの利点は、評価を短縮することです。VBScript(およびVB 6)は、条件付き評価を短絡しません。And演算子は論理的な評価として機能し、結果を決定するために条件付きの両側をテストする必要があります。ServerCommentが一致しないかどうかを確認する理由がないためKeyType、式を短絡することでパフォーマンスが少し向上します。VBScriptでそれを実現する唯一の方法は、ネストすることです(ありませんAndAlso)。

また、値かどうかをテストする意味がまったくないことも指摘しておく必要があります= True。と書き直すだけ(site.ServerComment = siteName) = Truesite.ServerComment = siteName、まったく同じ結果が得られます。条件文を書くのはとても不自然な方法なので、元のコードが何をしたのかを理解するのに少なくとも数分かかりました。

于 2010-12-29T13:17:34.007 に答える