切换整数表达式的情况

时间:2012-12-18 06:54:23

标签: c# .net

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

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

这是我想要做的一些事情,但无法知道如何将<25放在案例前面,因为根据开关案例规则它是不合适的。

4 个答案:

答案 0 :(得分:15)

对于你的特定情况,使用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;

}

答案 1 :(得分:5)

这对OP来说真的没什么帮助,但希望它能帮助将来寻找这个的人。

如果您正在使用C#7(在Visual Studio 2017中可用),则可以switch on a range

示例:

public List<Item> getDbItems()
{
    List<Item> dbItems = new ArrayList<>();
    EntityTransaction entr=em.getTransaction();
        entr.begin();
    TypedQuery<Item> query = em.createQuery("SELECT i FROM Item i", Item.class);
    dbItems = query.getResultList();
    em.getTransaction().commit();
    return dbItems;
}

答案 2 :(得分: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();

答案 3 :(得分: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;
}​