2014-01-14 51 views
1

当创建一个With声明像我可以在With语句中引用目标变量吗?

With A 
    .Method1OfA 
    .Method2OfA 
    .Method3OfA 
End With 

是存在于With语句块中引用当前“With”编辑变量的方法吗?

因为我不知道有什么,我发现自己写的东西是这样的:

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 

是可以接受的,但造成其生存的With声明范围的临时变量(B),后来由事故可能产生的问题引用它,如果A已经同时改变(即,如果它已被同时修改并引用不同的实例)。

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

+2

这是VB.NET还是VbScript?他们不是一回事 –

+0

我是否正确地理解你给这个例子:Dim S As DataSet'然后你会用S.Tables(“T”):Dim t As DataTable = currentlyWithed:End With'? –

+0

@Matt,我正在考虑这两个 – TheBlastOne

回答

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 
+0

您可能会重新删除此评论,但我仍然认为此答案不是答案,因为它包含在问题中。那么好吧,你建议将块分离成一个函数。让temp var超出范围。好。 +1。稍后可以接受。 – TheBlastOne

相关问题