我可以在With语句中引用目标变量吗?

时间:2014-01-14 11:54:02

标签: vb.net vbscript dereference

创建With语句,例如

With A
   .Method1OfA
   .Method2OfA
   .Method3OfA
End With

有没有办法在With语句块中引用当前的“With”ed变量?

由于我不知道,我发现自己写的是这样的东西:

With A
   .Method1OfA
   GlobalFunction (A)
   .Method2OfA
   GlobalFunction (A)
   .Method3OfA
End With

即。我比我更频繁地取消引用A。如果我能写出类似

的东西
With A
   .Method1
   GlobalFunction (currentlyWithed)
   .Method2
   GlobalFunction (currentlyWithed)
   .Method2
End With

currentlyWithed“自动”引用A,我可以避免我想要的解除引用,因为如果A是一个复杂的术语(很可能是首先是With语句的原因),我会避免对该术语进行多次评估。

解决方法解决方案

Dim B: Set B=A
With B
   .Method1
   GlobalFunction (B)
   .Method2
   GlobalFunction (B)
   .Method2
End With

是可以接受的,但是会创建一个临时变量(B),该变量在With语句的范围内存活,如果A同时发生更改,则稍后偶然引用它可能会产生问题(即如果它同时被修改并引用了不同的实例)。

所以我希望在VB.NET或VBScript中有类似currentlyWithed的东西,但我在文档中找不到类似的内容。

1 个答案:

答案 0 :(得分:1)

只需按照自己的方法进行解决方法。虽然它会创建一个临时对象,但它会在方法结束时超出范围(这意味着您不必担心对象未被清除):

Public Sub DoSomething(a As Object)
    Dim B: Set B=a
    With B
       .Method1
       GlobalFunction (B)
       .Method2
       GlobalFunction (B)
       .Method2
    End With
End Sub