如何在VBScript中测试布尔表达式?

时间:2010-12-29 13:05:07

标签: vbscript boolean boolean-expression

我正在尝试将代码从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.ServerCommentEmpty,则整个布尔表达式接收值Empty,该值不是False,因此输入then语句。

写这个表达的正确方法是什么?越短越好。

感谢。

1 个答案:

答案 0 :(得分:2)

我只是嵌套If语句,并插入额外的检查以防范ServerCommentEmpty的条件。我还将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语句的另一个好处是使评估短路。 VBScript(和VB 6)不会使条件评估短路 - And运算符作为逻辑运算符,要求对条件的两边进行测试,以便确定结果。因为没有理由检查ServerComment如果KeyType不匹配,您可以通过短路表达来获得一点性能。在VBScript中实现这一目标的唯一方法是嵌套(没有AndAlso)。

我还应该指出,测试值= True绝对没有意义。您只需将(site.ServerComment = siteName) = True重写为site.ServerComment = siteName,即可获得完全相同的结果。我花了至少几分钟来弄清楚你的原始代码甚至做了什么,因为这是一种非常自然的写条件方式。