当前位置:  开发笔记 > 编程语言 > 正文

C#开关:案件没有落到其他案件限制

如何解决《C#开关:案件没有落到其他案件限制》经验,为你挑选了2个好方法。

这个问题是怎么样的一个附加到这个的问题

在C#中,交换机案例无法通过其他情况,这会导致编译错误.在这种情况下,我只是在所选月份和之后的每个月的总月份中添加一些数字.(简单的例子,并不意味着真实)

switch (month)
{
    case 0:
      add something to month totals
    case 1:
      add something to month totals
    case 2:
      add something to month totals
    default:
      break;
}

在C#中是否有一个合乎逻辑的替代方案而不必写出大量的if语句?

if (month <= 0)
   add something to month
if (month <= 1)
   add something to month
if (month <= 2)
   add something to month
.... etc

Ben Scheirma.. 11

通常,当您看到来自巨大的switch语句的噪声或许多if语句可能属于多个块时,您试图抑制糟糕的设计.

相反,如果您实现规范模式以查看是否匹配某些内容,然后对其采取行动,该怎么办?

foreach(MonthSpecification spec in this.MonthSpecifications)
{
   if(spec.IsSatisfiedBy(month))
       spec.Perform(month);
}

然后你可以添加与你想要做的匹配的不同规格.

很难说出你的域名是什么,所以我的例子可能有点人为.



1> Ben Scheirma..:

通常,当您看到来自巨大的switch语句的噪声或许多if语句可能属于多个块时,您试图抑制糟糕的设计.

相反,如果您实现规范模式以查看是否匹配某些内容,然后对其采取行动,该怎么办?

foreach(MonthSpecification spec in this.MonthSpecifications)
{
   if(spec.IsSatisfiedBy(month))
       spec.Perform(month);
}

然后你可以添加与你想要做的匹配的不同规格.

很难说出你的域名是什么,所以我的例子可能有点人为.



2> jwarzech..:

在C#switch语句中,只有在您想要通过的情况没有声明时,才能通过案例

switch(myVar)
{
   case 1:
   case 2: // Case 1 or 2 get here
      break;
}

但是,如果你想要声明,你必须使用可怕的GOTO

switch(myVar)
    {
       case 1: // Case 1 statement
               goto case 2;
       case 2: // Case 1 or 2 get here
          break;
    }


我认为使用'dreaded'这个词是合理的.我可以很容易地想象程序员错过了在switch语句中使用`goto case`来使它在不同情况下跳转到原始情况.Goto导致意大利面,意大利面导致仇恨,仇恨导致痛苦.Goto是走向黑暗面的道路.
为什么GOTO会害怕?另外,使用"goto case"不是"goto语句".
推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有