我从来没有用过if/else if
代替switch case
,我想知道如何使用它。我真的很感谢你的帮助!任务是在文本框(TbVindstyrke)中输入风量,代码应该告诉用户风车中的风量是每小时多少瓦特(W/t)。它应该将结果发布到一个标签(lbWattprodusert)中。
我已经让它在if
-statement上工作了,据我所知,这需要大量的计算机处理能力(或其他东西)。所以,我想把它换成switch
-statement。
double Vs = 0;
private void btSjekkW_Click(object sender, EventArgs e)
{
Vs = Convert.ToDouble(tbVindstyrke.Text);
if (Vs >= 0 && Vs <= 2.4)
lbWattProdusert.Text = 0 + " W/t";
else if (Vs >= 2.5 && Vs <= 3.3)
lbWattProdusert.Text = 2 + " W/t";
else if (Vs >= 3.4 && Vs <= 5.4)
lbWattProdusert.Text = 10 + " W/t";
}
发布于 2019-05-09 03:15:56
switch
语句使用常量值。
因此,这是有效的:
var val = 2;
switch (val)
{
case 1:
// Do something if val is 1.
break;
case 2:
// Do something if val is 2.
break;
default:
// Do something for all values of val other than 1 or 2.
break;
}
但是您希望转换处理范围的if-else
。double
ranges也是如此。这是不可能的,因为switch
不允许使用范围。
如果您的范围是int
,您可以假设为每个流行的值编写一个case
,但这绝对没有意义。
比方说,如果值在int
1-3之间,你想做一些事情,如果它在4-6之间,你想做其他事情。你可以写一些像下面这样的东西,但那将是无意义的。你最好坚持使用if-else
。
var val = 2;
switch (val)
{
case 1:
case 2:
case 3:
// Do something if val is between 1-3.
break;
case 4:
case 5:
case 6:
// Do something if val is between 4-6.
break;
default:
// Do something for all other values of val
break;
}
发布于 2019-05-09 03:15:57
当您想要根据单个值在多个选项之间进行选择时,switch语句非常有用。当您想要对范围进行操作时,就像您在示例中所做的那样,需要一个if语句。
下面是一个switch语句的示例。您可以看到,您在开始时指定了要打开的值,然后可以基于相等执行不同的操作。
string color = "red";
switch (color)
{
case "red":
// do something
break;
case "green":
// do something
break;
case "blue":
// do something
break;
default:
throw new ColorUnknownException(color);
}
通常,switch语句是缺少设计模式的标志……但这是另一天的谈话。
发布于 2019-09-04 22:34:14
switch
不支持float
和double values
。但是,由于所有范围限制都是0.3的倍数,因此可以使用将该值除以0.3的技巧来实现您所寻求的结果,如下所示:
int Vi;
double Vs = 0;
private void btSjekkW_Click(object sender, EventArgs e)
{
Vs = Convert.ToDouble(tbVindstyrke.Text);
Vi = (int)(Vs / 0.3);
switch (caseSwitch)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
lbWattProdusert.Text = 0 + " W/t";
break;
case 9:
case 10:
case 11:
lbWattProdusert.Text = 2 + " W/t";
break;
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
lbWattProdusert.Text = 10 + " W/t";
default:
// what to do if Vs > 5.4
break;
}
}
https://stackoverflow.com/questions/56047480
复制相似问题