Переключатель C # с помощью String.IsNullOrEmpty - PullRequest
15 голосов
/ 11 января 2009

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

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

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

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

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

Ответы [ 7 ]

30 голосов
/ 11 января 2009

Я бы предложил что-то вроде следующего:

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

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

23 голосов
/ 11 января 2009

Что не так с вашим примером switch заявления?

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

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

Кстати, почему вы беспокоитесь о String.Empty? Я что-то здесь упускаю.

5 голосов
/ 11 января 2009

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

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

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

5 голосов
/ 11 января 2009

как насчет

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

}

3 голосов
/ 02 октября 2009

Я только что заметил, что вы можете комбинировать операторы 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;
}
3 голосов
/ 11 января 2009

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

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

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

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

0 голосов
/ 08 января 2013
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;
    }
}
...