C# 仅对一段代码使用大括号(不使用for、if、try等)有什么好处吗?

C# 仅对一段代码使用大括号(不使用for、if、try等)有什么好处吗?,c#,C#,可能重复: 我无意中在C#中发现了以下内容: 在调查时,我意识到可以简单地将大括号应用于代码块,这让我觉得这类似于“范围界定”代码: { string foo = "foo"; } string foo = "new foo!"; ……但事实并非如此 您为什么要这样做有什么好处、特点或用途吗?它确实为代码添加了一个额外的范围,因此以下内容是合法的 是的,它确实适用于该代码。您可以这样做: { string foo = "foo"; } if (someCondition) {

可能重复:

我无意中在C#中发现了以下内容:

在调查时,我意识到可以简单地将大括号应用于代码块,这让我觉得这类似于“范围界定”代码:

{
  string foo = "foo";
}

string foo = "new foo!";
……但事实并非如此


您为什么要这样做有什么好处、特点或用途吗?

它确实为代码添加了一个额外的范围,因此以下内容是合法的


是的,它确实适用于该代码。您可以这样做:

{
  string foo = "foo";
}

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

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

public void ScopedFoo {
    {
      string foo = "foo";
    }
    {
      string foo = "bar";
    }
}
……但事实并非如此

事实上,的确如此。代码中出现编译器错误的原因

{
    string foo = "foo";
}

string foo = "new foo!";
是因为局部变量在声明发生的整个块的范围内。因此,
foo
的“第二个”声明在整个块的范围内,包括声明它的“上面”,因此它与内部范围内声明的“第一个”
foo
冲突

您可以这样做:

{
    string foo = "foo";
}

{
    string foo = "new foo!";
}
现在,这两个作用域没有重叠,您不会得到您在说“…但它没有”时隐式引用的编译器错误

您为什么要这样做,有什么好处、特点或用途吗


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

抱歉,错过了这一点-刚刚发现这已被回答+1,因为它通常是一个糟糕的主意,如果您发现自己需要这样做,您应该后退一步,重新评估您的代码。相信我,我认为这很糟糕,但在编译时感到惊讶。
{
    string foo = "foo";
}

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

{
    string foo = "new foo!";
}