12

我正在尝试使用switch case而不是If Else语句,其中我必须首先检查字符串的长度,并根据我必须对其进行处理。

switch (mystring.length)
{
    case <=25:
    {
        //do this
        break;
    }
    case <50:
    {
        //do this
        break;
    }
    default:
        break;
}

这是我想做的事情,但无法获得如何放在<25案例前面,因为根据 switch case 规则它不合适。

4

4 回答 4

19

对于您的特定情况,使用 if/else 总是更好,使用 switch 语句,您不能在情况下设置条件。看起来您正在检查范围,如果范围是恒定的,那么您可以尝试以下操作(如果您想使用 switch 语句)

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;

}
于 2012-12-18T07:03:55.710 回答
9

这确实对 OP 帮助不大,但希望它能帮助将来寻找这个的人。

如果您使用的是 C# 7(在 Visual Studio 2017 中可用),则可以switch在范围.

例子:

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;
}
于 2017-05-29T14:56:46.817 回答
2

尝试这个:

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;
}​
于 2012-12-18T07:14:34.417 回答
2

您不能这样做,switch但可能有解决方法。

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();
于 2012-12-18T07:01:21.497 回答