只对一块代码使用大括号(不使用for、if、try等)有什么好处吗

本文关键字:if try 什么 for 一块 代码 | 更新日期: 2023-09-27 18:29:49

可能重复:
是否使用大括号进行其他作用域
C#中的浮动大括号

偶然间,我在C#中发现了以下内容:

if(condition) return true;
{
  // perform this if true
}

在调查时,我意识到你可以简单地将大括号应用于代码块,这让我认为这类似于对代码进行"范围界定":

{
  string foo = "foo";
}
string foo = "new foo!";

但事实并非如此。

你为什么要这样做,有什么好处、功能或用途吗?

只对一块代码使用大括号(不使用for、if、try等)有什么好处吗

但事实并非如此。

事实上,确实如此。你在代码上得到编译器错误的原因

{
    string foo = "foo";
}
string foo = "new foo!";

是因为局部变量在整个整个块的作用域中,声明发生在该块中。因此,foo的"第二个"声明在整个块的范围内,包括声明它的"上面",因此它与内部范围中声明的"第一个"foo冲突。

你可以这样做:

{
    string foo = "foo";
}
{
    string foo = "new foo!";
}

现在,这两个作用域没有重叠,你不会得到编译器错误,你在说"……但它没有。"时隐含地提到了这个错误

你为什么要这样做,有什么好处、功能或用途吗?

它允许您在两个不同的代码块中使用相同的简单名称。我认为这通常是一个非常糟糕的主意,但这就是这个功能可以让你做的。

它确实为代码添加了一个额外的作用域,因此以下是合法的。

{
    string foo = "foo";
}
{
    string foo = "foo2";
}

是的,它确实确定了代码的范围。你可以这样做:

{
  string foo = "foo";
}
if (someCondition)
{
  string foo = "new foo!";
}

它正在确定代码的范围。你的实验的问题是外部范围与内部范围冲突。考虑:

public void ScopedFoo {
    {
      string foo = "foo";
    }
    {
      string foo = "bar";
    }
}