2014-01-14 77 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

相關問題