范围块的好处
本文关键字:范围 | 更新日期: 2023-09-27 18:20:12
可能的重复项:
你什么时候使用代码块?
好吧,这可能是一个愚蠢的问题,我可能会错过一些明显的东西,但随着我慢慢学习 C#,这已经困扰了我一段时间。
下面的代码显然编译得很好:
public void Foo()
{
{
int i = 1;
i++;
}
{
int i = 1;
i--;
}
}
我知道{}
块可用于范围界定。问题是你为什么要这样做?此功能解决了哪些问题?
我可以看到使用它们没有害处,除非它确实增加了更令人困惑的代码,因为与那些"绑定"到流控制、迭代等的作用域相比,这些范围更容易被忽视。
它在变量声明可能会混淆的语句中很有用switch
:
令人困惑的代码:
switch (true)
{
case true:
var msg = "This is true.";
var copy = msg;
break;
case false:
msg = "This is false.";
copy = msg;
break;
}
明码:
switch (true)
{
case true:
{
var msg = "This is true.";
var copy = msg;
break;
}
case false:
{
var msg = "This is false.";
var copy = msg;
break;
}
}
正如您所指出的,为了范围而创建人工块通常只是令人困惑。我从来没有发现需要它。
如果有一些感知到的需要,我的猜测是重构到一个单独的方法通常是一个更好的选择。
(注意,我并不是说这绝对不好。我只是认为你需要一些非常专业的需求才能拥有它(
对于像这样的"裸"范围块,我倾向于同意你的看法。 从语言设计的角度来看,我认为它们是for
、while
和if
条件下隐式作用域块的概括,在这些条件下它们更重要。 例如:
foreach (var x in foos) {
var someMessage = x.ToString();
doSomething(someMessage);
}
快速的答案是它可以防止您以意外的方式无意中更改变量。 通过将其"在范围内",您只能在需要时对其采取行动,而不是"意外"更改值