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
È stato utile?

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;
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top