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.ServerCommentEmpty,则整个布尔表达式接收值Empty,它不是 False ,因此输入 then 语句。

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

谢谢。

4

1 回答 1

3

我会简单地嵌套If语句,并插入一个额外的检查来防止条件 where ServerCommentis Empty。我还将 的值提取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操作符作为一个逻辑操作符工作,要求条件的两边都经过测试才能确定结果。因为没有理由检查ServerCommentifKeyType不匹配,所以通过使表达式短路,您将获得一点性能。在 VBScript 中实现这一点的唯一方法是嵌套(没有AndAlso)。

我还应该指出,测试 if a value 绝对没有意义= True。您可以简单地重写(site.ServerComment = siteName) = Truesite.ServerComment = siteName,并获得完全相同的结果。我至少花了几分钟才弄清楚你的原始代码做了什么,因为这是一种不自然的编写条件的方式。

于 2010-12-29T13:17:34.007 回答