Question

Est-il possible d'avoir un commutateur en C # qui vérifie si la valeur est null ou vide et non """ mais String.Empty ? Je sais que je peux le faire:

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

Y a-t-il quelque chose de mieux, car je ne veux pas avoir une longue liste d'instructions IF?

J'essaie de remplacer:

if (String.IsNullOrEmpty(text))
    blah;
else if (text = "hi")
    blah
Était-ce utile?

La solution

Je suggérerais quelque chose comme ceci:

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

Est-ce ce que vous cherchez?

Autres conseils

Quel est le problème avec votre exemple d'instruction switch ?

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

Cela fonctionne (et pour une raison qui m’a surpris - je pensais que cela se plaindrait ou s’écraserait sur le cas null ) et c’est clair.

D'ailleurs, pourquoi vous inquiétez-vous pour String.Empty ? Il me manque quelque chose ici.

que diriez-vous

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

}

Extrait de la documentation . de String.Empty :

  

La valeur de ce champ est le   chaîne de longueur nulle "".

Selon moi, cela signifie qu'il n'y a pas de différence entre "" et String.Empty . Pourquoi essayez-vous de les distinguer?

Une chaîne vide est "", ce qui est égal à String.Empty. La raison pour laquelle vous pouvez mettre """ dans une instruction case mais pas "String.Empty". est-ce que " Vide " est un champ de la classe " Chaîne " et " est en fait une valeur contant.

Les valeurs constantes sont autorisées dans les cas. String.Empty est un champ et peut être modifié au moment de l'exécution. (Dans ce cas, il restera le même, mais tous les champs statiques de chaque classe ne sont pas des valeurs constantes.)

Dans le cas de 'if', cette condition est évaluée au moment de l'exécution et si pas nécessite une valeur constante.

J'espère que cela explique pourquoi.

Ce que je viens de remarquer, c’est que vous pouvez combiner if / else et changer d’instruction! , ce qui est très utile lorsque vous devez vérifier les conditions préalables.

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;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top