17

値が "" ではなく null または空であるかどうかをチェックする C# のスイッチを持つことは可能String.Emptyですか? 私はこれができることを知っています:

switch (text)
{
    case null:
    case "":
        break;
}

IF ステートメントの大きなリストを持ちたくないので、もっと良いものはありますか?

私は交換しようとしています:

if (String.IsNullOrEmpty(text))
    blah;
else if (text = "hi")
    blah
4

8 に答える 8

31

次のようなものをお勧めします。

switch(text ?? String.Empty)
{
    case "":
        break;
    case "hi":
        break;
}

それはあなたが探しているものですか?

于 2009-01-11T02:13:12.127 に答える
25

あなたの例のswitchステートメントの何が問題になっていますか?

switch (text)
{
    case null:
    case "":
        foo();
        break;
    case "hi":
        bar();
        break;
}

それは機能します (そして、何らかの理由で私を驚かせました - 私はそれが文句を言うか、nullケースでクラッシュすると思っていました) そしてそれは明らかです.

さらに言えば、なぜあなたは心配しているのString.Emptyですか?ここで何かが欠けています。

于 2009-01-11T03:23:25.933 に答える
6

ドキュメントからString.Empty:

このフィールドの値は、長さ 0 の文字列 "" です。

""私はこれを と の間に違いがないことを意味すると解釈しString.Emptyます。なぜそれらを区別しようとしているのですか?

于 2009-01-11T02:17:40.840 に答える
6

どうですか

if (string.isNullOrEmpty(text))
{
   //blah
}
else
{
 switch (text)
 {
     case "hi":
 }

}

于 2009-01-11T02:05:00.287 に答える
4

空の文字列は "" で、これは String.Empty と同じです。"" を case ステートメントに入れることができるが "String.Empty" を入れることができない理由は、"Empty" はクラス "String" のフィールドであり、"" は実際には定数値だからです。

場合によっては定数値が許可されます。String.Empty はフィールドであり、実行時に変更される可能性があります。(この場合、同じままですが、各クラスのすべての静的フィールドが定数値であるとは限りません。)

「if」の場合、その条件は実行時に評価され、if は定数値を必要としません。

これで理由が説明されることを願っています。

于 2009-01-11T05:45:26.207 に答える
3

私が気付いたのは、if/else ステートメントと switch ステートメントを組み合わせることができるということです。前提条件を確認する必要がある場合に非常に便利です。

if (string.IsNullOrEmpty(text))
{
    //blah
}
else switch (text)
{
    case "hi":
        Console.WriteLine("How about a nice game of chess?");
        break;
    default:
        break;
}
于 2009-10-02T13:54:26.620 に答える
0
string StrMode;
if (!string.IsNullOrEmpty(StrMode))
{  
    switch (StrMode.Trim())
    {
        case "Souse":
        {
             //Statement Eg:  
             MesssageBox.Show("Souse");
             break;
        }

        case "Company Agent":
        {
             //Statement Eg:
             MesssageBox.Show("Souse");
             break; 
        }

        default:
             return;
    }
}
于 2013-01-08T07:02:13.160 に答える