首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有句法意义的代码块

没有句法意义的代码块
EN

Stack Overflow用户
提问于 2014-09-23 07:28:31
回答 2查看 109关注 0票数 3

有时,我看到的代码如下所示,但实际上并不知道它的含义:

代码语言:javascript
复制
void myFunc() {
    MyClass a = new MyClass();

    {
        if (a.b == null) // doSomething
    }
}

我真的很喜欢这种代码分类和封装(不仅因为如果你不读它的内容,你可能会立刻崩溃整个块),但我想知道它是否除了光学缩进之外还有什么语法意义。Ofc。我知道,就像在每个代码块中一样,在块中声明的任何变量都只能在那里使用,但是否还有更多的变量可用。也有对象初始化器,但是由于这些对象与类的实际实例有关,上面是一个完全独立的块。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-23 07:38:32

构建像你描述的那样

代码语言:javascript
复制
void myFunc() {
    MyClass a = new MyClass();

    {
        if (a.b == null) // doSomething
    }
}

主要用于你喜欢它们的原因相同的事情。仅仅是因为光学上的原因,才能使这些部分倒塌。它们也可以用于变量作用域,但这比用于其他目的的使用要少一些。

一个可能的替代办法(只考虑到光学方面的原因)是利用各区域来取得同样的结果。虽然它的缺点是,您必须编写更多的代码,而不仅仅是{},但您的优势是可以声明代码部分的内容。

代码语言:javascript
复制
void myFunc() {
    MyClass a = new MyClass();

    #region Setting the players base stats
        if (a.b == null) // doSomething
    #endregion
}

这种方法对变量作用域没有任何作用,但至少可以让您知道什么是未显示的(如果区域被折叠)。同时,这两种方法都可以组合在一起(因此在区域内是{},这样就可以封装变量)。

代码语言:javascript
复制
void myFunc() {
    MyClass a = new MyClass();

    #region Setting the players base stats
    {
        if (a.b == null) // doSomething
    }
    #endregion
}

但是回到你的问题,除了光学的原因和可变的范围之外,没有句法上的理由去做这件事。

票数 0
EN

Stack Overflow用户

发布于 2014-09-23 07:38:22

我不知道它是否除了光学缩进之外还有什么句法意义。

不,他们没什么特别的。C#语言将块声明为封装可选语句列表的一对大括号,并注意到这允许在允许单个语句的地方编写多个语句。

这反过来简化了语言规范的其他部分,如iffor等,然后只需要指定它们,就好像它们之后只有一条语句。

事实上,这意味着你也可以在任何地方使用它们,这基本上是一个愉快的意外。

您可以在C#语言规范第8.2节中阅读它们的完整规范。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25989356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档