可以使用 && 或 ||在开关语句中?Visual C#.

本文关键字:amp Visual 语句 开关 可以使 | 更新日期: 2023-09-27 18:36:39

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

似乎不起作用。

可以使用 && 或 ||在开关语句中?Visual C#.

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

开关适用于单个表达式

您可以查看 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)

在 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
}

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

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

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

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

你想做的事情没有意义,如果 playercore = 3 和 pcscore = 2,那么 playercore || pcscore 等于什么?

如果你有一大堆变量,不仅仅是两个,而是 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并不是操作

此类集合的合适工具。

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

switch (playerscore || pcscore)

在您的情况下,请使用"if"语句

假设 playerscore 和 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;
    }