可以使用 && 或 ||在开关语句中?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;
}
}
似乎不起作用。
简单的答案是否定的。你不能那样使用它。
开关适用于单个表达式。
您可以查看 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;
}