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

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

    }

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 に答える