如何在C#中使用Switch Case作为十进制值

时间:2012-07-12 17:30:23

标签: c# vb.net

我正在将代码从VB.net转换为C#。由于C#的新手被卡在小数 Switch()语句中。我发现我不能在switch语句中使用十进制值。

VB switch语句如下所示:

changeAmt是十进制

  

选择案例changeAmt

Case Is > 0
     
             expressions
  
Case Is < 0
     
             expressions
  

我如何将其转换为C#?

我是否必须使用if-else语句。我想使用switch,因为它会使代码更容易编写和理解

8 个答案:

答案 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

Is using decimal ranges in a switch impossible in C#?

答案 6 :(得分:0)

最容易阅读的解决方案是使用if-else块。

if (changeAmt > 0)
{
    // blablabla
}
else if (changeAmt < 0)
{
    // blablabla
}

不确定为什么它是VB中的开关案例,似乎是不必要的。

答案 7 :(得分:0)

对于decimals,您可以使用ifif-else语句。

if(condition)
{

}
else if(condition)
{

}