代码之家  ›  专栏  ›  技术社区  ›  cyberbobcat

是否有一种方法可以在Switch语句中执行某些代码,这些代码仅在传递了任何情况时才执行?

  •  3
  • cyberbobcat  · 技术社区  · 17 年前

    有没有一种方法可以为每个“案例”执行相同的代码行,但只需键入一次,而不是为所有案例指定相同的代码?

            switch (SomeTest)
            {
                case "test1":
                    {
                        // Do something for test 1 
                        break;
                    }
                case "test2":
                    {
                        // Do something for test 2 
                        break;
                    }
                case "test3":
                    {
                        // Do something for test 3 
                        break;
                    }
                // =====> Then do something generic here for example if case is test1, test2 or test3
            }
    
    7 回复  |  直到 17 年前
        1
  •  7
  •   Garry Shutler    17 年前

    你是不是想得太多了?

    switch(SomeTest)
    {
        // specific stuff
    }
    
    // code you want running for every case
    

    否则,在不设置标志或其他东西的情况下,你能做的最好的事情是:

    switch(SomeTest)
    {
        // specific stuff
    }
    
    switch(SomeTest)
    {
        case "Test1", "Test2", "Test3":
            // stuff for the matching cases
    }
    

    或者,如果你想为你匹配的每个案例运行代码:

    bool runGenericStuff = true;
    
    switch(SomeTest)
    {
        // specific stuff
        default:
            runGenericStuff = false;
    }
    
    if (runGenericStuff)
    {
        // run generic stuff
    }
    

    这使您在任何情况下都不必设置标志。

        2
  •  3
  •   Gerrie Schenck    17 年前

    将通用逻辑放在一个单独的方法中,并在每个需要它的案例标签上调用它。

        3
  •  3
  •   Juozas Kontvainis    17 年前

    我会这样做:

        bool doSomething = true;
    
        switch (SomeTest)
        {
            case "test1":
                {
                    // Do something for test 1 
                    break;
                }
            case "test2":
                {
                    // Do something for test 2 
                    break;
                }
            case "test3":
                {
                    // Do something for test 3 
                    break;
                }
            default:
                {
                doSomething = false;
                }
        }
    
        if (doSomething)
        {
        // your code here
        }
    
        4
  •  2
  •   Khadaji    17 年前

    bool ShouldIDoSomething=false;

        switch (SomeTest)
        {
            case "test1":
                {
                    // Do something for test 1 
                    ShouldIDoSomething=true;
                    break;
                }
            case "test2":
                {
                    // Do something for test 2 
                    ShouldIDoSomething=true;
                    break;
                }
            case "test3":
                {
                    // Do something for test 3 
                    ShouldIDoSomething=true;
                    break;
                }
            // =====> Then do something generic here for example if case is test1, test2 or test3
    
        }
    

    如果(本应做某事) DoSomething通用

        5
  •  2
  •   Weeble    17 年前

    对此没有特殊的语法支持。你可以通过这样做来获得效果:

    public static void DoSomething(string testValue)
    {
        bool hasMatch = true;
        switch(testValue)
        {
            case "Test1":
                WL("Test1");
                break;
            case "Test2":
                WL("Test2");
                break;
            case "Test3":
                WL("Test3");
                break;
            default:
                WL("No match.");
                hasMatch = false;
                break;
        }
        if (hasMatch)
        {
            WL("Match found.");
        }
    }
    
        6
  •  1
  •   Richard    17 年前

    Debug.Assert(value != 99);
    switch (value) {
      case 1:
        DoSomething();
        goto case 99;
      case 2:
        DoSomethingElse():
        goto case 99:
      case 3:
        DoNothingHere();
        break;
    
      case 99:
        // A case that will never be directly called.
        DoSomethingInCommon();
        break;
    }
    
        7
  •  0
  •   dbkk    17 年前

    稍微简单一点

    switch(x) {
      case Foo:
        // your normal cases here
        break;
      default: 
        // post-processing NOT covered by normal cases
        return;  
    }
    // post-processing if any of the cases were handled