C# 使用switch语句而不是if

C# 使用switch语句而不是if,c#,if-statement,switch-statement,C#,If Statement,Switch Statement,所以我刚开始编程,从c开始。在我正在读的书(学习c#3.0)中,其中一个练习是这样的 练习5-2。创建一个程序,提示用户输入,接受整数,然后 评估该输入是否为零、奇数或偶数、10的倍数或太大(更多) 通过使用多个级别的if语句 我设法做到了这一点,但下一个练习是 练习5-3。重写练习5-2中的程序以执行相同的操作 使用switch语句 我理解switch语句是如何工作的,但是,我不确定如何计算用户输入的数字是否为奇数/偶数、10的倍数等等,并且不使用if语句。谢谢您的帮助。您可以这样做: int

所以我刚开始编程,从c开始。在我正在读的书(学习c#3.0)中,其中一个练习是这样的

练习5-2。创建一个程序,提示用户输入,接受整数,然后 评估该输入是否为零、奇数或偶数、10的倍数或太大(更多) 通过使用多个级别的if语句

我设法做到了这一点,但下一个练习是

练习5-3。重写练习5-2中的程序以执行相同的操作 使用switch语句

我理解switch语句是如何工作的,但是,我不确定如何计算用户输入的数字是否为奇数/偶数、10的倍数等等,并且不使用if语句。谢谢您的帮助。

您可以这样做:

int input = ...
switch (input)
{
    case 0:
        Console.WriteLine("Zero");
        default;
    default:
        switch (input < 100)
        {
            case true:
                switch (Math.Abs(input) % 10)
                {
                    case 0:
                        Console.WriteLine("Multiple of 10");
                        break;
                    case 2:
                    case 4:
                    case 6:
                    case 8:
                        Console.WriteLine("Even");
                        break;
                    default:
                        Console.WriteLine("Odd");
                        break;
                }
                break;
            default:
                Console.WriteLine("Too large");
                break;
        }
        break;
}
int输入=。。。
开关(输入)
{
案例0:
控制台写入线(“零”);
违约
违约:
开关(输入<100)
{
大小写正确:
开关(数学Abs(输入)%10)
{
案例0:
控制台写入线(“10的倍数”);
打破
案例2:
案例4:
案例6:
案例8:
控制台。写线(“偶数”);
打破
违约:
控制台。写入线(“奇数”);
打破
}
打破
违约:
控制台。WriteLine(“太大”);
打破
}
打破
}
我不认为用C语言中的一个
开关就可以做到这一点,除非你把它做得太大,以至于从0到100的每一个数字都能计算出来。您可能可以使用一个类似于C#
开关的单键来执行此操作,但其语义明显不同。

您可以执行以下操作:

int input = ...
switch (input)
{
    case 0:
        Console.WriteLine("Zero");
        default;
    default:
        switch (input < 100)
        {
            case true:
                switch (Math.Abs(input) % 10)
                {
                    case 0:
                        Console.WriteLine("Multiple of 10");
                        break;
                    case 2:
                    case 4:
                    case 6:
                    case 8:
                        Console.WriteLine("Even");
                        break;
                    default:
                        Console.WriteLine("Odd");
                        break;
                }
                break;
            default:
                Console.WriteLine("Too large");
                break;
        }
        break;
}
int输入=。。。
开关(输入)
{
案例0:
控制台写入线(“零”);
违约
违约:
开关(输入<100)
{
大小写正确:
开关(数学Abs(输入)%10)
{
案例0:
控制台写入线(“10的倍数”);
打破
案例2:
案例4:
案例6:
案例8:
控制台。写线(“偶数”);
打破
违约:
控制台。写入线(“奇数”);
打破
}
打破
违约:
控制台。WriteLine(“太大”);
打破
}
打破
}


我不认为用C语言中的一个
开关就可以做到这一点,除非你把它做得太大,以至于从0到100的每一个数字都能计算出来。你可能可以用一个单键来实现,它类似于C#
开关,但语义有很大的不同。

你能告诉我们你尝试了什么吗???一个打开布尔值的开关,以及大小写true和false。这是一个链接。我能理解你的问题。这似乎是个糟糕的练习。它似乎不适合
开关
语句。当然@BenjaminGruenbaum是正确的,如果(b){…}或者{…}
可以被重写成开关(b){case-true:…;break;default:…;break;}
,但是这不是一个实际的用法。您可以通过打开
num%10
,将“奇数或偶数”和“10的倍数”放在一起,假设您确保数字不是负数,但我认为这也不是一个实际的用途。@JeppeStigNielsen完全正确。您能告诉我们您尝试了什么吗???一个打开布尔值的开关,一个是真的,一个是假的。这里有一个链接。我能理解你的问题。这似乎是个糟糕的练习。它似乎不适合
开关
语句。当然@BenjaminGruenbaum是正确的,如果(b){…}或者{…}
可以被重写成开关(b){case-true:…;break;default:…;break;}
,但是这不是一个实际的用法。您可以通过打开
num%10
,将“奇数或偶数”和“10的倍数”放在一起,假设您确保数字不是负数,但我认为这也不是一个实际的用法。@JeppeStigNielsen完全正确。这不应该在生产代码中使用,但做得很好:)输入==0呢?同时,也要尽量尊重条件的顺序given@TGO谢谢,我忘了零号的案子了。虽然我认为你不能完全按照给定的顺序处理这些条件。你必须先检查<100,然后再检查它是否可以被10或2整除。@p.s.w.g不管怎样,正如杰普·斯蒂格·尼尔森在问题中所评论的那样,这个练习本身是不好的formed@TGO同意。这根本不是我在任何现实情况下都会写的那种代码。还有更多相关的情况可以合法地应用开关。这在生产代码中永远不应该使用,但做得很好:)输入==0呢?同时,也要尽量尊重条件的顺序given@TGO谢谢,我忘了零号的案子了。虽然我认为你不能完全按照给定的顺序处理这些条件。你必须先检查<100,然后再检查它是否可以被10或2整除。@p.s.w.g不管怎样,正如杰普·斯蒂格·尼尔森在问题中所评论的那样,这个练习本身是不好的formed@TGO同意。这根本不是我在任何现实情况下都会写的那种代码。还有更多的相关案例可以合法地应用开关。