可以使用&&或||在switch语句中? Visual C#

时间:2013-10-23 16:28:54

标签: c# if-statement switch-statement

所以我正在制作一个Rock Paper Scissor游戏,我对它做了一些调整,包括生活和其他事情。现在我陷入了switch语句。我的if语句工作正常:

private void Result_TextChanged(object sender, EventArgs e)
{
     if (playerscore == 1 || pcscore == 1)
     {
          PlayerLife.Image = Properties.Resources.Five;
     }
}

我想知道如何将其转换为switch语句?

private void Result_TextChanged(object sender, EventArgs e)
{              
    switch (playerscore || pcscore)
    {
         case 1:
             PlayerLife.Image = Properties.Resources.Five;
             break;
    }
}

似乎不起作用。

7 个答案:

答案 0 :(得分:8)

简单的答案是否定的。你不能那样使用它。

Switch使用单个表达式

您可以查看MSDN了解详情。

您可以尝试这样: -

  if (playerscore == pcscore)
        {
            switch (playerscore)
            {
                case 1:
                PlayerLife.Image = Properties.Resources.Five;
                break;
            }
        }

修改: -

Jeppe Stig Nielsen在评论中评论You can switch on any expression of a suitable type. That expression may contain ||. There can be many case labels associated with each switch section in a switch block.

但就个人而言,这不是一个好习惯。您可以尝试使用if语句。

如果您愿意,可以尝试这样做:

 switch (playerscore == 1 || pcscore == 1)

答案 1 :(得分:3)

在C#中,switch语句解析单个表达式,并将该值与可能的个案列表进行比较:

switch(someExpression)
{
   case x: // This runs if someExpression == x
      break;
   case y: // This runs if someExpression == y
      break;
}

现在, switch表达式(playerscore == 1 || pcscore == 1)就像这样:

switch(playerscore == 1 || pcscore == 1) // This expression is either true or false
{
   case true: // Runs if playerscore is 1 or pcscore is 1
      break;
   case false: // runs if neither playscore or pcscore are 1
      break;
}

然而,上述内容相当难以理解和愚蠢。你最好使用if声明:

if(playerscore == 1 || pcscore == 1)
{
   // Runs if playerscore is 1 or pcscore is 1
}
else
{
   // runs if neither playscore or pcscore are 1
}

答案 2 :(得分:3)

你可以这样写,但你为什么要这样做?

  switch (playerscore == 1 || pcscore == 1)
        {
            case true:
                PlayerLife.Image = Properties.Resources.Five;
                break;
            default:
                break;
        }

正如Jeppe在下面的评论中指出的那样,当你使用||时或者&&您最终会使用bool并使用if语句。

对于可以在swtich语句中用作表达式的内容answer @EricLippert,这是一个很棒的{{3}}。

答案 3 :(得分:1)

你想要做的事情没有意义,如果playercore = 3和pcscore = 2那么玩家会怎么样? pcscore等于?

答案 4 :(得分:1)

如果你有一大堆变量,不仅仅是两个,而是5,10,甚至是一个未知的数字,那么你可以做的就是将你要比较的所有值都放到1进入一个集合,然后作为一个整体对该集合采取行动。

//this could just be a list/array accepted as a paramter, 
//can include other variables, or whatever
var scores = new []{playerscore, pcscore};

if(scores.Any(score => score == 1))
    PlayerLife.Image = Properties.Resources.Five;

switch实际上并不适合像这样操纵集合。

答案 5 :(得分:0)

这没有任何意义:在switch语句中,您总是希望与特定类型进行比较,而不是如下所示的布尔值:

switch (playerscore || pcscore)

在您的情况下使用'if'语句

答案 6 :(得分:0)

假设playercore和pcscore是整数,其中0或1为可能的值

    resp = playerscore + 10 * pcscore;
    switch (resp)
    {
        case 0:
            // both are false
            break;
        case 1:
            // playerscore true
            break;
        case 10:
            // pcscore true
            break;
        case 11:
            // both are true
            break;
        default:
            // error in input data
            break;
    }