web-dev-qa-db-fra.com

Vérifiez si une variable se trouve dans une liste de valeurs ad hoc

Existe-t-il une manière plus courte d'écrire quelque chose comme ceci:

if(x==1 || x==2 || x==3) // do something

Ce que je recherche, c'est quelque chose comme ceci:

if(x.in((1,2,3)) // do something
44
user1854438

Vous pouvez y parvenir en utilisant la méthode List.Contains :

if(new []{1, 2, 3}.Contains(x))
{
    //x is either 1 or 2 or 3
}
50
Ilya Ivanov
public static bool In<T>(this T x, params T[] set)
{
    return set.Contains(x);
}

...

if (x.In(1, 2, 3)) 
{ ... }

Lecture requise: méthodes d'extension MSDN

31
Austin Salonen

Si c'est dans un IEnumerable<T>, utilisez ceci:

if (enumerable.Any(n => n == value)) //whatever

Sinon, voici une méthode d'extension courte:

public static bool In<T>(this T value, params T[] input)
{
    return input.Any(n => object.Equals(n, value));
} 

Mettez-le dans un static class, et vous pouvez l'utiliser comme ceci:

if (x.In(1,2,3)) //whatever
11
It'sNotALie.
int x = 1;
if((new List<int> {1, 2, 3}).Contains(x))
{
}
1
RacerNerd

Je devine entièrement ici, corrigez le code si je me trompe:

(new int[]{1,2,3}).IndexOf(x)>-1
0
Isaac