С# Switch с String.IsNullOrEmpty

Возможно ли иметь переключатель на С#, который проверяет, является ли значение нулевым или пустым, но не "", а String.Empty? Я знаю, что могу это сделать:

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

Есть ли что-то лучше, потому что я не хочу иметь большой список операторов IF?

Я пытаюсь заменить:

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

Ответ 1

Я бы предложил следующее:

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

Это то, что вы ищете?

Ответ 2

Что случилось с вашим примером switch?

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

Это работает (и почему-то это меня удивило - я думал, что он будет жаловаться или рушиться на случай null), и это ясно.

В этом отношении, почему вы беспокоитесь о String.Empty? Мне что-то не хватает.

Ответ 3

как насчет

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

}

Ответ 4

Из документация String.Empty:

Значение этого поля строка с нулевой длиной, "".

Я интерпретирую это как означающее отсутствие разницы между "" и String.Empty. Почему вы пытаетесь различать их?

Ответ 5

Пустая строка - это ", которая равна String.Empty. Причина, по которой вы можете поместить" "в оператор case, но не" String.Empty ", заключается в том, что" Empty "является полем класса" String "и" " на самом деле является континентным значением.

В случаях допустимы постоянные значения, String.Empty - это поле и может быть изменено во время выполнения. (В этом случае он останется прежним, но не все статические поля каждого класса являются постоянными значениями.)

В случае "if" это условие оценивается во время выполнения и если не требует постоянного значения.

Надеюсь, это объясняет, почему.

Ответ 6

Что-то, что я только заметил, заключается в том, что вы можете комбинировать 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;
}

Ответ 7

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