有时,我看到的代码如下所示,但实际上并不知道它的含义:
void myFunc() {
MyClass a = new MyClass();
{
if (a.b == null) // doSomething
}
}我真的很喜欢这种代码分类和封装(不仅因为如果你不读它的内容,你可能会立刻崩溃整个块),但我想知道它是否除了光学缩进之外还有什么语法意义。Ofc。我知道,就像在每个代码块中一样,在块中声明的任何变量都只能在那里使用,但是否还有更多的变量可用。也有对象初始化器,但是由于这些对象与类的实际实例有关,上面是一个完全独立的块。
发布于 2014-09-23 07:38:32
构建像你描述的那样
void myFunc() {
MyClass a = new MyClass();
{
if (a.b == null) // doSomething
}
}主要用于你喜欢它们的原因相同的事情。仅仅是因为光学上的原因,才能使这些部分倒塌。它们也可以用于变量作用域,但这比用于其他目的的使用要少一些。
一个可能的替代办法(只考虑到光学方面的原因)是利用各区域来取得同样的结果。虽然它的缺点是,您必须编写更多的代码,而不仅仅是{},但您的优势是可以声明代码部分的内容。
void myFunc() {
MyClass a = new MyClass();
#region Setting the players base stats
if (a.b == null) // doSomething
#endregion
}这种方法对变量作用域没有任何作用,但至少可以让您知道什么是未显示的(如果区域被折叠)。同时,这两种方法都可以组合在一起(因此在区域内是{},这样就可以封装变量)。
void myFunc() {
MyClass a = new MyClass();
#region Setting the players base stats
{
if (a.b == null) // doSomething
}
#endregion
}但是回到你的问题,除了光学的原因和可变的范围之外,没有句法上的理由去做这件事。
发布于 2014-09-23 07:38:22
我不知道它是否除了光学缩进之外还有什么句法意义。
不,他们没什么特别的。C#语言将块声明为封装可选语句列表的一对大括号,并注意到这允许在允许单个语句的地方编写多个语句。
这反过来简化了语言规范的其他部分,如if、for等,然后只需要指定它们,就好像它们之后只有一条语句。
事实上,这意味着你也可以在任何地方使用它们,这基本上是一个愉快的意外。
您可以在C#语言规范第8.2节中阅读它们的完整规范。
https://stackoverflow.com/questions/25989356
复制相似问题