只对一块代码使用大括号(不使用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!";
但事实并非如此。
你为什么要这样做,有什么好处、功能或用途吗?
但事实并非如此。
事实上,确实如此。你在代码上得到编译器错误的原因
{
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";
}
}