8

所以我正在制作一个石头剪刀布游戏,我对它进行了一些调整,以包括生活和其他事物。现在我被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;
    }
}

似乎不起作用。

4

7 回答 7

10

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

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)
于 2013-10-23T16:31:36.190 回答
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
}
于 2013-10-23T16:32:38.580 回答
3

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

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

正如 Jeppe 在下面的评论中指出的那样,当您使用 || 或者 && 你最终得到一个boolandif应该使用一个语句。

这是@EricLippert关于什么可以用作 swtich 语句中的表达式的一个很好的答案

于 2013-10-23T16:33:12.733 回答
1

您尝试做的事情没有意义,如果 playercore = 3 和 pcscore = 2 那么 playercore || pcscore 等于?

于 2013-10-23T16:33:05.837 回答
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不是真正适合像这样操作集合的工具。

于 2013-10-23T16:42:08.197 回答
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;
    }
于 2013-10-23T18:35:34.053 回答
0

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

switch (playerscore || pcscore)

在您的情况下使用“if”语句

于 2013-10-23T16:33:36.667 回答