首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带/不带大括号的C# Switch语句....有什么关系呢?

带/不带大括号的C# Switch语句....有什么关系呢?
EN

Stack Overflow用户
提问于 2010-09-06 22:58:11
回答 3查看 26.4K关注 0票数 78

C#是否总是允许您在switch()语句中省略case:语句之间的花括号?

像javascript程序员经常做的那样,省略它们会有什么效果呢?

示例:

代码语言:javascript
运行
复制
switch(x)
{
  case OneWay:
  {                               //  <---- Omit this entire line
    int y = 123;
    FindYou(ref y);
    break;
  }                               //  <---- Omit this entire line
  case TheOther:
  {                               //  <---- Omit this entire line
    double y = 456.7; // legal!
    GetchaGetcha(ref y);
    break;
  }                               //  <---- Omit this entire line
}
EN

回答 3

Stack Overflow用户

发布于 2010-09-06 23:00:21

大括号是switch block的可选部分,它们不是开关部分的一部分。大括号可以插入到开关节中,也可以等同地插入到代码中的任何位置,以控制范围。

它们可用于限制开关块内的范围。例如:

代码语言:javascript
运行
复制
int x = 5;

switch(x)
{
case 4:
    int y = 3;
    break;
case 5:
    y = 4;
    //...                      
    break;
}

vs..。

代码语言:javascript
运行
复制
int x = 5;

switch(x)
{
  case 4:
  {
    int y = 3;
    break;
  }
  case 5:
  {
    y = 4;//compiling error
    //...                      
    break;
  }
}

注意:在使用第一个示例中的case 5块之前,C#将要求您将该块中的值设置为y。这是对意外变量的保护。

票数 16
EN

Stack Overflow用户

发布于 2010-09-06 23:13:11

交换机内部的大括号实际上根本不是交换机结构的一部分。它们只是作用域块,您可以将其应用于代码中任何您喜欢的地方。

拥有它们和不拥有它们的区别在于,每个块都有自己的作用域。您可以在作用域中声明局部变量,这与其他作用域中的其他变量不冲突。

示例:

代码语言:javascript
运行
复制
int x = 42;
{
  int y = x;
}
{
  int y = x + 1; // legal, as it's in a separate scope
}
票数 10
EN

Stack Overflow用户

发布于 2010-09-06 23:01:34

它们并不是必须的,但是一旦您开始声明局部变量(在switch分支中),就非常推荐使用它们。

这是行不通的:

代码语言:javascript
运行
复制
    // does not compile
    switch (x)
    {
        case 1 :               
            int j = 1;
            ...
            break;

        case 3:
            int j = 3;   // error
            ...
            break;
    }

这段代码可以编译,但很诡异:

代码语言:javascript
运行
复制
    switch (x)
    {
        case 1 :               
            int j = 1;
            ...
            break;

        case 3:
            j = 3;
            ...
            break;
    }

所以这是最好的:

代码语言:javascript
运行
复制
  switch (x)
    {
        case 1 : 
         {             
            int j = 1;
            ...
         }
         break;  // I prefer the break outside of the  { }

        case 3: 
         {
            int j = 3;
            ...
         }
         break;
    }

只要保持简单和可读性即可。您不希望要求读者对中间示例中涉及的规则有详细的了解。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3652408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档