【问题标题】:Convert If to Switch Statement将 If 转换为 Switch 语句
【发布时间】:2012-07-05 09:25:21
【问题描述】:

我一直在尝试将 If Else 语句转换为 switch,但它给出了一个需要常量的错误:

这是我一直在处理的代码:

using System;

namespace ConsoleApplication6

{
    class Program
    {
        static void Main()
        {
            String me;
            int ME = 0, YOU = 5, THEY = 20, THEM = 30;
            Console.WriteLine("Default Values: YOU = 5, THEY = 20 and THEM = 30\nValue for \"ME\" >>");
            me = Console.ReadLine();
            ME = Int16.Parse(me);

            switch(true) {
                case (ME > 0 && ME < 12) :  
                 YOU = ME;
                 Console.WriteLine("Value of YOU is {0}", YOU);
                 break;

                case ( ME == 15):
                YOU = THEY * THEM;
                Console.WriteLine("Value of YOU is {0}", YOU);
                break;

                case (ME == 20):
                YOU++;
                Console.WriteLine("Value of YOU is {0}", YOU);
                break;

                case (ME == 17):
                YOU = YOU - 4;
                Console.WriteLine("Value of YOU is {0}", YOU);
                break;

                default:
                Console.WriteLine("You've entered {0}", ME);
                Console.WriteLine("Value of YOU is {0}", YOU);
                break;


           }
            Console.WriteLine("Press Enter to EXIT");
            Console.ReadLine();

        }

    }
}

这是我要转换的内容:

using System;

namespace ConsoleApplication5
{
    class Program
    {
        static void Main()
        {
            String me;
            int ME = 0, YOU = 5, THEY = 20, THEM = 30;
            Console.WriteLine("Default Values: YOU = 5, THEY = 20 and THEM = 30\nValue for \"ME\" >>");
            me = Console.ReadLine();
            ME = Int16.Parse(me);

            if (0 < ME && ME < 12)
            {
                YOU = ME;
                Console.WriteLine("Value of YOU is {0}", YOU);
            }
            else if( ME == 15)
            {
                YOU = THEY * THEM;
                Console.WriteLine("Value of YOU is {0}", YOU);
            }

            else if (ME == 20)
            {
                YOU++;
                Console.WriteLine("Value of YOU is {0}", YOU);
            }

            else if (ME == 17)
            {
                YOU = YOU - 4;
                Console.WriteLine("Value of YOU is {0}", YOU);
            }

            else
            {
                Console.WriteLine("You've entered {0}", ME);
                Console.WriteLine("Value of YOU is {0}", YOU);

            }
            Console.WriteLine("Press Enter to EXIT");
            Console.ReadLine();

        }

    }
}

【问题讨论】:

  • 请不要在您的问题中使用(Need help ASAP!)。我们可以看到您需要帮助,这很明显,因为您发布了一个问题,而就ASAP 而言,这不是我们关心的问题。根据问题的质量,您迟早会得到答案。
  • 嗯,改变它根本没有多大意义,是吗?好吧,也许是出于可读性的原因,但其他一切都是一样的。正如 PoweRoy 提到的,您首先需要了解 switch 语句。如果你之后仍然认为你需要重构你的代码,你应该看看“真正的”重构模式,比如replace-conditional-with-polymorphism
  • 嗯,我真的没有发现任何问题......它对我来说很好......你能解释一下你的问题吗?

标签: c# if-statement switch-statement case


【解决方案1】:

我认为您需要先了解开关。开关应用于变量,在本例中为“ME”。此外,switch-case 不能有“范围”条目,只有“精确”。所以你的代码看起来像:

String me;
int ME = 0, YOU = 5, THEY = 20, THEM = 30;
Console.WriteLine("Default Values: YOU = 5, THEY = 20 and THEM = 30\nValue for \"ME\" >>");
me = Console.ReadLine();
ME = Int16.Parse(me);

if ((0 > ME) && (ME < 12))
{
    YOU = ME;
    Console.WriteLine("Value of YOU is {0}", YOU);
}
else 
{
    switch (ME)
    {
        case 15:
            YOU = THEY * THEM;
            break;
        case 20:
            YOU++;
            break;
        case 17:
            YOU = YOU - 4;
            break;
        default:        
            break;
    }

    Console.WriteLine("You've entered {0}", ME);
    Console.WriteLine("Value of YOU is {0}", YOU);
}
Console.WriteLine("Press Enter to EXIT");
Console.ReadLine();

你也犯了一个复制粘贴错误:if (0 &lt; ME &amp;&amp; ME &lt; 12)应该if (0 &gt; ME &amp;&amp; ME &lt; 12)

要选择仅开关解决方案,您可以使用跌落式外壳。但我认为这很丑陋,并且使代码更难阅读。

String me;
int ME = 0, YOU = 5, THEY = 20, THEM = 30;
Console.WriteLine("Default Values: YOU = 5, THEY = 20 and THEM = 30\nValue for \"ME\" >>");
me = Console.ReadLine();
ME = Int16.Parse(me);

switch (ME)
{
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
    case 8:
    case 9:
    case 10:
    case 11:
        YOU = ME;
        break;          
    case 15:
        YOU = THEY * THEM;
        break;
    case 20:
        YOU++;
        break;
    case 17:
        YOU = YOU - 4;
        break;
    default:        
        break;
}

Console.WriteLine("You've entered {0}", ME);
Console.WriteLine("Value of YOU is {0}", YOU);

Console.WriteLine("Press Enter to EXIT");
Console.ReadLine();

【讨论】:

  • 但我的教授希望一切以防万一。 (对不起,我是个混蛋)我是新来的。 :)
  • 你的重复案例 20:两次第一次做 YOU++,第二次打破;
  • @Jasper 你是什么意思他“希望一切以防万一”?你必须有一个变量来switch on。所以它必须在switch(&lt;here&gt;)
  • @PoweRoy (0 0 和 ME
  • 是的,在您发布之前发现并更新了答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多