【问题标题】:Changing code from if-statement to switch-statement in C#在 C# 中将代码从 if 语句更改为 switch 语句
【发布时间】:2019-05-08 19:07:04
【问题描述】:

我从未使用过switch case 而不是if/else if,我想知道如何使用它。我非常感谢您的帮助!任务是在文本框(tbVindstyrke)中输入一定量的风,代码应该告诉用户风车每小时产生的瓦特量(W/t)。它应该将结果发布在标签中 (lbWattprodusert)。

我已经让它与if-statement 一起使用,据我所知,这会占用大量计算机处理能力(或其他东西)。所以,我想把它改成switch-statement。

double Vs = 0;
private void btSjekkW_Click(object sender, EventArgs e)
{
    Vs = Convert.ToDouble(tbVindstyrke.Text);
    if (Vs >= 0 && Vs <= 2.4)
        lbWattProdusert.Text = 0 + " W/t";
    else if (Vs >= 2.5 && Vs <= 3.3)
        lbWattProdusert.Text = 2 + " W/t";
    else if (Vs >= 3.4 && Vs <= 5.4)
        lbWattProdusert.Text = 10 + " W/t";
}

【问题讨论】:

  • 一个开关在这里不起作用,因为您正在寻找一个范围内的值。
  • 快速搜索,我找到了这个stackoverflow.com/a/44078916/5569172
  • 不要害怕 if 语句。需要注意的一件事:当您之前将其检查为上限时,您不需要再次检查下限。 Plus 2.45 不会落在裂缝之间
  • 如果你还想用if/else if,我建议你改成这个if (Vs &gt;= 0 &amp;&amp; Vs &lt;= 2.4) lbWattProdusert.Text = 0 + " W/t"; else if (Vs &lt;= 3.3) lbWattProdusert.Text = 2 + " W/t"; else if (Vs &lt;= 5.4) lbWattProdusert.Text = 10 + " W/t";,避免2.4和2.5,3.3和3.4之间的差距。

标签: c# if-statement switch-statement


【解决方案1】:

switch 语句使用常量值。

所以,这是有效的:

var val = 2;
switch (val)
{
    case 1:
        // Do something if val is 1.
        break;
    case 2:
        // Do something if val is 2.
        break;
    default:
        // Do something for all values of val other than 1 or 2.
        break;
}

但您想转换处理范围的if-elsedouble 范围也是如此。这是不可能的,因为 switch 不允许您使用范围。

如果你的范围是int,你可以假设为愤怒中的每个值写一个case,但这绝对没有意义。

比如说,如果值在int 1-3 之间,你想做一些事情,如果它在 4-6 之间,你想做一些别的事情。你可以写下类似的东西,但那将是荒谬的。你最好坚持if-else

var val = 2;
switch (val)
{
    case 1:
    case 2:
    case 3:
        // Do something if val is between 1-3.
        break;
    case 4:
    case 5:
    case 6:
        // Do something if val is between 4-6.
        break;
    default:
        // Do something for all other values of val
        break;
}

【讨论】:

    【解决方案2】:

    当您想要基于单个值在多个选项之间进行选择时,switch 语句很有用。当您想要处理范围时,就像您在示例中所做的那样,需要一个 if 语句。

    这是一个 switch 语句的示例...您可以看到您在开始时指定了要打开的值,然后您可以根据相等性执行不同的操作。

    string color = "red";
    
    switch (color)
    {
        case "red":
            // do something
            break;
        case "green":
            // do something
            break;
        case "blue":
            // do something
            break;
        default:
            throw new ColorUnknownException(color);
    }
    

    很多时候,switch 语句是缺少设计模式的标志......但这是另一天的对话。

    【讨论】:

      【解决方案3】:

      switch 不适用于float 和双倍values。但是,由于您的所有范围限制都是 0.3 的倍数,您可以使用将值除以 0.3 的技巧来实现您的目标,如下所示:

      int Vi;
      double Vs = 0;
      private void btSjekkW_Click(object sender, EventArgs e)
      {
          Vs = Convert.ToDouble(tbVindstyrke.Text);
          Vi = (int)(Vs / 0.3);
          switch (caseSwitch)
          {
              case 0:
              case 1:
              case 2:
              case 3:
              case 4:
              case 5:
              case 6:
              case 7:
              case 8:
                  lbWattProdusert.Text = 0 + " W/t";
                  break;
              case 9:
              case 10:
              case 11:
                  lbWattProdusert.Text = 2 + " W/t";
                  break;
              case 12:
              case 13:
              case 14:
              case 15:
              case 16:
              case 17:
              case 18:
                  lbWattProdusert.Text = 10 + " W/t";
                default:
                  // what to do if Vs > 5.4
                  break;
            }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多