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!";
}