120 votes

si des instructions correspondant à plusieurs valeurs

Une manière plus simple d'écrire cette instruction if?

if (value==1 || value==2)

Par exemple ... en SQL, vous pouvez dire where value in (1,2) au lieu de where value=1 or value=2 .

Je cherche quelque chose qui fonctionnerait avec n'importe quel type de base ... chaîne, int, etc.

200voto

Amry Points 2113

Que diriez-vous:

 if (new[] {1, 2}.Contains(value))
 

C'est un hack quand même :)

Ou si cela ne vous dérange pas de créer votre propre méthode d'extension, vous pouvez créer ce qui suit:

 public static bool In<T>(this T obj, params T[] args)
{
    return args.Contains(obj);
}
 

Et vous pouvez l'utiliser comme ceci:

 if (1.In(1, 2))
 

:)

37voto

Paolo Tedesco Points 22442

Une manière plus compliquée :) qui émule le 'IN' de SQL:

 public static class Ext {    
    public static bool In<T>(this T t,params T[] values){
        foreach (T value in values) {
            if (t.Equals(value)) {
                return true;
            }
        }
        return false;
    }
}

if (value.In(1,2)) {
    // ...
}
 

Mais optez pour la méthode standard, c'est plus lisible.

EDIT : une meilleure solution, selon la suggestion de @ Kobi:

 public static class Ext {    
    public static bool In<T>(this T t,params T[] values){
        return values.Contains(t);
    }
}
 

30voto

Homam Points 8664

Est-ce ce que vous recherchez ?

 if (new int[] { 1, 2, 3, 4, 5 }.Contains(value))
 

7voto

jules Points 245

Alternativement, et cela vous donnerait plus de flexibilité si vous testez des valeurs autres que 1 ou 2 à l'avenir, utilisez une instruction switch

 switch(value)
{
case 1:
case 2:
   return true;
default:
   return false
}
 

6voto

Nik Points 1522

Si vous avez une liste, vous pouvez utiliser .Contains (votreObjet), si vous cherchez juste à l'exister (comme un où). Sinon, regardez la méthode d'extension Linq .Any ().

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