77 votes

Comment combiner || opérateurs dans la déclaration de condition

Au lieu de

 if (foo == "1" || foo == "5" || foo == "9" ... ) 
 

J'aime les combiner comme suit (ce qui ne fonctionne pas):

 if (foo == ("1" || "5" || "9" ... ))
 

Est-ce possible?

169voto

Trevor Pilley Points 7304

Malheureusement non, votre meilleur pari est de créer une méthode d'extension

 public static bool IsOneOf<T>(this T value, params T[] options)
{
    return options.Contains(value);
}
 

et vous pouvez l'utiliser comme ceci:

 if (foo.IsOneOf("1", "5", "9"))
{
    ...
}
 

Étant générique, il peut être utilisé pour n'importe quel type (int, chaîne, etc.).

37voto

walkhard Points 16756

Vous ne pouvez pas le faire de cette façon. Au lieu de cela, vous pouvez faire ceci:

 string[] validValues = new string[] { "1", "5", "9", "whatever" };
if(validValues.Contains(foo))
{
    // do something
}
 

25voto

Michael Perrenoud Points 37869

Une option possible est la suivante:

 switch (foo)
{
    case "1":
    case "5":
    case "9":
        // your code here

        break;
}
 

Une autre option possible est la suivante:

 var vals = new string[] { "1", "5", "9" };
if (vals.Contains(foo))
{
    // your code here
}
 

23voto

jsedano Points 1708

Si toutes les options ne sont qu'un seul caractère, vous pouvez faire:

 if ("159".IndexOf(foo) != -1)
{
  //do something
}
 

18voto

Gray Points 3117

Voici encore une autre alternative:

 bool x = new[] { "1", "5", "9" }.Any(a => a == "5"); //x == true
bool y = new[] { "1", "5", "9" }.Any(a => a == "8"); //y == false
 

Il vaut mieux utiliser .Contains(foo) dans ce cas, car la flexibilité du lambda est plutôt gâchée ici. S'il y avait une expression complexe à faire, Any serait plus utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X