0

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

VB switch 语句如下所示:

changeAmt 是十进制

选择案例更改量

Case Is > 0
             expressions
Case Is < 0
             expressions

如何将其转换为 C#?

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

4

8 回答 8

4

您必须为此使用if语句。您可以将值转换为不同的类型,但您仍然不能在case.

所以:

if (changeAmt > 0) {
  ...
} else if (changeAmt < 0) {
  ...
}
于 2012-07-12T17:33:03.153 回答
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 所说,枚举在这里非常有用!

于 2012-07-12T17:50:53.203 回答
1

你必须使用if-else. 在 C# 中,switch 语句仅用于常量值的情况。

于 2012-07-12T17:32:28.490 回答
1

VB.Net 中的语句支持比C# 中的语句Select Case更广泛的表达式。switchAC#switch本质上仅限于数字和字符串常量,同时Select Case可以支持任意表达式。当移植Select Case不适合 C# 范围的内容时,switch您应该使用if / else语句

if (changeAmt > 0) { 
  // expressions 
} else if (changeAmt < 0) {
  // expressions
}
于 2012-07-12T17:32:41.870 回答
1

您只能在 C# 中切换特定值,因此在您的特定情况下,您需要使用 if else if:

if(changeAmt < 0){
} else if (changeAmt > 0)
{
} else 
{
}
于 2012-07-12T17:33:23.587 回答
0

switch 语句仅支持整数类型(枚举未列出,但可以与 switch 语句一起使用,因为它们由整数类型支持)(如 Changeling 所指出的,还支持字符串 - 请参阅注释以供参考)以及与常量值的相等比较. 因此,您必须使用一些 if 语句。

if else 可以用吗?

如果(是 > 0)

             expressions

否则如果(是 < 0)

             expressions

在 C# 中是否不可能在开关中使用小数范围?

于 2012-07-12T17:32:53.913 回答
0

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

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

不知道为什么它是 VB 中的 switch case,似乎没有必要。

于 2012-07-12T17:33:05.150 回答
0

Fordecimals你可以使用ifandif-else语句。

喜欢

if(condition)
{

}
else if(condition)
{

}
于 2012-07-12T17:33:14.010 回答