所以我正在制作一个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;
}
}
似乎不起作用。
答案 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;
}