Switch C # con String.IsNullOrEmpty
-
08-07-2019 - |
Domanda
È possibile avere un interruttore in C # che controlla se il valore è nullo o vuoto non " " ma String.Empty
? So di poterlo fare:
switch (text)
{
case null:
case "":
break;
}
C'è qualcosa di meglio, perché non voglio avere un ampio elenco di istruzioni IF?
Sto cercando di sostituire:
if (String.IsNullOrEmpty(text))
blah;
else if (text = "hi")
blah
Soluzione
Suggerirei qualcosa di simile al seguente:
switch(text ?? String.Empty)
{
case "":
break;
case "hi":
break;
}
È quello che stai cercando?
Altri suggerimenti
Cosa c'è che non va nella tua istruzione switch
di esempio?
switch (text)
{
case null:
case "":
foo();
break;
case "hi":
bar();
break;
}
Funziona (e per qualche ragione mi ha sorpreso - ho pensato che si sarebbe lamentato o si sarebbe schiantato sul caso null
) ed è chiaro.
Del resto, perché sei preoccupato per String.Empty
? Mi manca qualcosa qui.
che ne dici
if (string.isNullOrEmpty(text))
{
//blah
}
else
{
switch (text)
{
case "hi":
}
}
Dalla documentazione di String.Empty
:
Il valore di questo campo è il stringa di lunghezza zero, " " ;.
Lo interpreto nel senso che non esiste alcuna differenza tra " "
e String.Empty
. Perché stai cercando di distinguerli tra loro?
Una stringa vuota è " " ;, che è uguale a String.Empty. Il motivo per cui puoi inserire " " in un'istruzione case ma non " String.Empty " è che "vuoto" è un campo della classe " String " e " " è in realtà un valore contante.
I valori costanti sono consentiti nei casi, String.Empty è un campo e potrebbe essere modificato in fase di esecuzione. (In questo caso rimarrà lo stesso, ma non tutti i campi statici di ogni classe sono valori costanti.)
Nel caso di 'if', tale condizione viene valutata in fase di esecuzione e se non richiede un valore costante.
Spero che questo spieghi il perché.
Qualcosa che ho appena notato è che puoi combinare if / else e cambiare le istruzioni! Molto utile quando devi controllare i presupposti.
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;
}
}