2014-10-06 47 views
0

在C#中,只需在代碼中放置一些大括號即可創建新的作用域。例如:VB.NET是否可以創建具有新範圍的嵌入塊?

{ 
    Foo fooA = new Foo(); 
    fooA.doSomething(); 
    fooA.doSomethingElse(); 
} 

{ 
    // Can't refer to fooA in here. 
    Foo fooB = new Foo(); 
    fooB.doSomething(); 
    fooB.doSomethingElse(); 
} 

VB.NET是否有辦法創建一個新的作用域而不使用任何保留字?

回答

2

你可以這樣做(遠不及優雅的C#代碼,但做相同的工作):

If True Then 
     Dim fooA As New Foo() 
     fooA.doSomething() 
     fooA.doSomethingElse() 
    End If 

    If True Then 
     ' Can't refer to fooA in here. 
     Dim fooB As New Foo() 
     fooB.doSomething() 
     fooB.doSomethingElse() 
    End If 

我不得不質疑爲什麼你想,雖然做到這一點...重構跳轉到我

+0

我不認爲沒有控制結構的花括號是特別優雅的,所以我會說這個VB代碼與C#代碼一樣優雅。 – 2014-10-06 15:40:29

1

首先,「沒有使用任何保留字」的要求是不公平的,因爲VB.Net使用的是單詞而不是大括號。換句話說,C#大括號實際上就是僞裝中的單詞(令牌)。

也就是說,VB.Net不能完全按照C#的方式來完成它。你需要一些特定類型的代碼塊。例如,它很容易,只是包括在If塊代碼,總是如此:

If True Then 
    '... 
End If 

上述數額幾乎同樣的事情,而且很可能(未經測試)工程以幾乎相同的IL作爲C#,因爲我希望編譯器優化掉任何實際的布爾測試。

但是,在這種情況下,由於兩個塊的功能都差不多,所以我總是試圖將代碼抽象到自己的方法中。如果你真的想要,你甚至可以使用Action或Func委託來保存現有的本地方法中的所有內容,並避免代碼重複。

相關問題