5

次のコードを検討してください。

if (results.Contains(14))
{
    //anything
}
else if (results.Contains(15))
{
    //anything
}
else if (results.Contains(16))
{
    //anything
}

このコードを switch case で書きたい:

switch (results)
{
    case results.Contains(14):
}

しかし、これを C# で書くことはできません。

resultsであることを知って、上記のコードを書くための明確な方法は何long[]ですか?

4

9 に答える 9

8

これの何が問題なのですか:

if (results.Contains(14) || results.Contains(15) || results.Contains(16))
{
  new Exception("anything");
}
于 2013-08-13T13:05:06.807 に答える
4

おそらく、正規表現を使用することが一番の解決策を持つ文字列にあるためです。

var m = System.Text.RegularExpressions.Regex.Matches(results, @"\d{1,2}")[0];
throw new Exception(m);

(注:これはメモ帳で行ったので、微調整が必​​要になる場合があります)

これは 1 ~ 2 個の数字にしか適していないため、おそらく match 構文をいじる必要があります。文字列で。

于 2013-08-13T13:06:04.307 に答える
3

アクション辞書を使ったアプローチが好き

        var swticher = new Dictionary<long, Func<Exception>>()
        {
            {15,()=>new Exception("15")},
            {14,()=>new Exception("14")}
        };

        throw swticher[14].Invoke();

もちろん、より複雑な例は、このアプローチの力を示します:)

スイッチの代わりに辞書を使用する理由: https://stackoverflow.com/a/11617459/1714342

概要:

簡単に言うと、switch ステートメントは線形に実行されますが、ディクショナリは対数的に実行されます。

于 2013-08-13T13:05:23.473 に答える
3

通常、if/switch ステートメントを置き換える明確な方法は、ポリモーフィズムを使用することです。ただし、提供した例では、 if ステートメントは非常に単純であるため、Robert Snyder の回答で述べられているように、例外の内容を計算する単純なアルゴリズムに置き換えることができます。

于 2013-08-13T13:10:23.960 に答える
2

switch内でステートメントを使用できますforeach

long[] results = new long[] { 15, 14, 16 };
foreach (long v in results)
{
    switch (v)
    {
        case 14:
            // anything
            break;
        case 15:
            // anything
            break;
        case 16:
            // anything
            break;
    }
}

また、質問によりよく一致させるには、最初に配列を注文し、一致後に foreach を取得する必要があります。

long[] results = new long[] { 15, 14, 16 };
Array.Sort(results);
foreach (long v in results)
{
    switch (v)
    {
        case 14:
            // anything
            break;
        case 15:
            // anything
            break;
        case 16:
            // anything
            break;
        default:
            continue; // continue the foreach loop
    }
    break; // break the foreach loop because we had a valid match
}
于 2013-08-13T13:14:41.407 に答える
1

このコードをswitch caseで書きたい

switch-ステートメントは、与えられた変数の値caseに従って実行パスを分岐するために使用されます。OPは、ブール式 の値、具体的には の戻り値に従って分岐したいと考えています。これは-ステートメントを使用してのみ実行できます。は整数の配列であるため、書き込みは意味がありません。Containsifelseswitch (results)results

于 2013-08-13T13:18:22.997 に答える