在C#中,只需在代码周围放置一些大括号即可创建新的作用域。例如:
{
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是否有办法在不使用任何保留字的情况下创建新范围?
答案 0 :(得分: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
我不得不质疑为什么你会想要这样做...重构跳到我身边
答案 1 :(得分:1)
首先,“不使用任何保留字”的要求并不公平,因为VB.Net使用的是单词而不是大括号。换句话说,C#括号实际上只是伪装的单词(代币)。
也就是说,VB.Net不能完全按照C#的方式去做。您需要一些特定类型的代码块。例如,只需将代码包含在始终为真的If
块中就足够了:
If True Then
'...
End If
以上几乎完全相同,可能(未经测试)与C#几乎相同的IL,因为我希望编译器能够优化掉任何实际的布尔测试。
但是,在这种情况下,由于两个块几乎完全相同,所以我很想将这些代码抽象出来,无论如何都要使用它自己的方法。如果你真的想要,你甚至可以使用Action或Func委托来保存现有本地方法中的所有内容,并且仍然可以避免代码重复。