2014-10-06 53 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委托来保存现有的本地方法中的所有内容,并避免代码重复。

相关问题