关于c#:switch case with integer expression

switch case with integer expression

我试图用switch case代替If Else语句,在这个语句中,我必须首先检查字符串的长度,并根据这个情况来处理它。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
switch (mystring.length)
{
    case <=25:
    {
        //do this
        break;
    }
    case <50:
    {
        //do this
        break;
    }
    default:
        break;
}

这是我想做的一些事情,但我无法知道如何把<25放在案件前面,因为根据交换案件规则,这是不合适的。


对于特定的情况,最好使用if/else,对于switch语句,不能在该情况中放置条件。看起来您正在检查范围,如果范围是常量,则可以尝试以下操作(如果要使用switch语句)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int Length = mystring.Length;
int range = (Length - 1) / 25;
switch (range)
{
    case 0:
        Console.WriteLine("Range between 0 to 25");
        break;
    case 1:
        Console.WriteLine("Range between 26 to 50");
        break;
    case 2:
        Console.WriteLine("Range between 51 to 75");
        break;

}


这确实对手术没有太大帮助,但希望它能帮助将来找这个的人。

如果您使用的是C 7(在Visual Studio 2017中提供),则可以在一个范围内使用switch

例子:

1
2
3
4
5
6
7
8
9
10
switch (mystring.length)
{
    case int n when (n >= 0 && n <= 25):
    //do this
    break;

    case int n when (n >= 26 && n <= 50 ):
    //do this
    break;
}


试试这个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int range = (int) Math.Floor(mystring.Length / 25);

switch (range) {
case 0:

    //do this <= 25
    break;

case 1:

    //do this < 50 & > 25
    break;

default:
    break;
}?


你不能用switch来做这个,但是可能有一个解决方法。

1
2
3
4
5
6
7
8
9
Dictionary<int, Action> actions = new Dictionary<int, Action>()
    {
        {25,()=>Console.WriteLine("<25")},
        {49,()=>Console.WriteLine("<50")},
        {int.MaxValue,()=>Console.WriteLine("Default")},
    };


actions.First(kv => mystring.length < kv.Key).Value();