Вопрос

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

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

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

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

if (String.IsNullOrEmpty(text))
    blah;
else if (text = "hi")
    blah
Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

как насчет

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

}

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

  

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

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

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

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

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

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

Я только что заметил, что вы можете комбинировать if / else и переключать операторы! Очень полезно, когда нужно проверить предварительные условия.

if (string.IsNullOrEmpty(text))
{
    //blah
}
else switch (text)
{
    case "hi":
        Console.WriteLine("How about a nice game of chess?");
        break;
    default:
        break;
}
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;
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top