2

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

        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
        }
4

7 回答 7

7

你是不是想多了?

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
}

这样您就不必在每种情况下都设置标志。

于 2009-02-20T10:40:46.583 回答
3

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

于 2009-02-20T10:43:36.953 回答
3

我会这样做:

    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
    }
于 2009-02-20T10:49:02.803 回答
2

布尔应该IDoSomething = 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

    }

if(ShouldIDoSomething) DoSomething 通用

于 2009-02-20T10:43:54.517 回答
2

对此没有特殊的语法支持。您可以通过执行以下操作来获得效果:

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.");
    }
}
于 2009-02-20T10:48:50.870 回答
1

默认情况下,C# 的开关不会进入下一个案例(与 C/C++ 不同),但您可以转到另一个案例。

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;
}
于 2009-02-20T10:40:45.587 回答
0

稍微简单一点

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
于 2009-02-20T14:02:44.587 回答