我从未使用过switchcase而不是if / else if,而且我想知道如何从if / else if转到切换语句。我非常感谢您的帮助!任务是在文本框(tbVindstyrke)中放入一定量的风,代码应告诉用户在风车中每小时产生的瓦数(W / t)。它应该将结果张贴在标签(lbWattprodusert)中。
据我所知,我已经将它与if语句一起使用,这占用了许多计算机处理能力(或某种程度)的能力。因此,我想将其“切换”为切换状态。
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";
}
答案 0 :(得分:2)
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
范围也是如此。这是不可能的,因为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;
}
答案 1 :(得分:0)
当您要基于单个值在多个选项之间进行选择时,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);
}
很多时候,转换语句是缺少设计模式的标志……但这又是一段对话。
答案 2 :(得分:0)
switch
不适用于float
并加倍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;
}
}