范围块的好处?

时间:2012-01-11 17:56:15

标签: c#

  

可能重复:
  When do you use code blocks?

好吧,这可能是一个愚蠢的问题,我可能会遗漏一些明显的东西但是当我慢慢学习C#时,这已经让我唠叨了一段时间。

以下代码显然编译得很好:

public void Foo()
{
    {
        int i = 1;
        i++;
    }

    {
        int i = 1;
        i--;
    }
}

我知道{}块可用于范围界定。问题是你为什么要这样做?这个功能解决了哪些问题?

我在使用它们时没有任何害处,除非它确实增加了一个更令人困惑的代码,因为与那些“绑定”流控制,迭代等相比,这些范围可能更容易被忽略。

4 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

我想说,为了确定范围而创建一个人工块通常会让人感到困惑,正如您所指出的那样。我从来没有找到它的需要。

如果有人认为需要它,我的猜测是重构成一个单独的方法通常是一个更好的选择。

(注意我并不是说绝对坏。我认为你需要一些非常专业的需要才能拥有它)

答案 2 :(得分:1)

对于像这样的“裸露”范围,我倾向于同意你的看法。从语言设计的角度来看,我认为它们是forwhileif条件中隐式作用域块的概括,它们更重要。例如:

foreach (var x in foos) {
    var someMessage = x.ToString();
    doSomething(someMessage);
}

答案 3 :(得分:0)

快速回答是它可以防止您以意外的方式无意中更改变量。通过让它“在范围内”,你可以只在你想要而不是“意外地”改变价值时采取行动