Ответ 1
Я бы предложил следующее:
switch(text ?? String.Empty)
{
case "":
break;
case "hi":
break;
}
Это то, что вы ищете?
Возможно ли иметь переключатель на С#, который проверяет, является ли значение нулевым или пустым, но не "", а 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
:
Значение этого поля строка с нулевой длиной, "".
Я интерпретирую это как означающее отсутствие разницы между ""
и String.Empty
. Почему вы пытаетесь различать их?
Пустая строка - это ", которая равна String.Empty. Причина, по которой вы можете поместить" "в оператор case, но не" String.Empty ", заключается в том, что" Empty "является полем класса" String "и" " на самом деле является континентным значением.
В случаях допустимы постоянные значения, String.Empty - это поле и может быть изменено во время выполнения. (В этом случае он останется прежним, но не все статические поля каждого класса являются постоянными значениями.)
В случае "if" это условие оценивается во время выполнения и если не требует постоянного значения.
Надеюсь, это объясняет, почему.
Что-то, что я только заметил, заключается в том, что вы можете комбинировать 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;
}
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;
}
}