我正在将代码从VB.net转换为C#。由于C#的新手被卡在小数的 Switch()语句中。我发现我不能在switch语句中使用十进制值。
VB switch语句如下所示:
changeAmt是十进制
选择案例changeAmt
Case Is > 0
expressions
Case Is < 0
expressions
我如何将其转换为C#?
我是否必须使用if-else语句。我想使用switch,因为它会使代码更容易编写和理解
答案 0 :(得分:4)
您必须使用if
语句。您可以将值转换为其他类型,但仍然无法使用case
中的条件。
所以:
if (changeAmt > 0) {
...
} else if (changeAmt < 0) {
...
}
答案 1 :(得分:2)
您仍然可以做的是单一级别的间接。它赚得更多 清除你想要表达的内容,并根据自己的喜好离开结构。 并且,您可以在任何想要使用小数的地方使用此转换 开关。很简单,不是吗?
以下是一些简单的代码,可以显示我想说的内容:
public enum EnumChangeAmt
{
Undetermined,
Negative,
Positive,
ExactlyNull,
}
public class EnumSwitchSample
{
public void EnumSwitch()
{
var changeAmt = 0;
var changeAmtType = GetChangeAmt(changeAmt);
switch (changeAmtType)
{
case EnumChangeAmt.Negative:
{
break;
}
case EnumChangeAmt.Positive:
{
break;
}
case EnumChangeAmt.ExactlyNull:
{
break;
}
case EnumChangeAmt.Undetermined:
default:
{
// do something about it
break;
}
}
}
public EnumChangeAmt GetChangeAmt(int changeAmt)
{
if (changeAmt < 0)
{
return EnumChangeAmt.Negative;
}
if (changeAmt > 0)
{
return EnumChangeAmt.Positive;
}
if (changeAmt == 0)
{
return EnumChangeAmt.ExactlyNull;
}
return EnumChangeAmt.Undetermined;
}
}
正如Andre Calil所说,枚举在这里非常有用!
答案 2 :(得分:1)
您必须使用if-else
。在C#中,switch语句只包含常量值。
答案 3 :(得分:1)
VB.Net中的Select Case
语句支持比C#中的switch
语句更广泛的表达式。 C#switch
基本上限于数字和字符串常量,而Select Case
可以支持任意表达式。移植不适合C#Select Case
范围的switch
时,您应使用if / else
语句
if (changeAmt > 0) {
// expressions
} else if (changeAmt < 0) {
// expressions
}
答案 4 :(得分:1)
您只能在C#中打开特定值,因此在您的特定情况下,您需要使用if else if:
if(changeAmt < 0){
} else if (changeAmt > 0)
{
} else
{
}
答案 5 :(得分:0)
switch语句仅支持整数类型(枚举不是 列出但可以与switch语句一起使用,因为它们是支持的 通过整数类型)(也支持字符串,如指出 改变 - 参见评论以供参考)和平等比较 具有恒定值。因此,您必须使用一些if语句。
你能使用if else吗?
if(Is> 0)
expressions
否则if(Is&lt; 0)
expressions
答案 6 :(得分:0)
最容易阅读的解决方案是使用if-else块。
if (changeAmt > 0)
{
// blablabla
}
else if (changeAmt < 0)
{
// blablabla
}
不确定为什么它是VB中的开关案例,似乎是不必要的。
答案 7 :(得分:0)
对于decimals
,您可以使用if
和if-else
语句。
像
if(condition)
{
}
else if(condition)
{
}