La façon la plus succincte de déterminer si une variable est égale à une valeur d'une «liste» de valeurs


9

Si j'ai une variable en C# qui doit être vérifiée pour déterminer si elle est égale à l'un d'un ensemble de variables, quelle est la meilleure façon de le faire?

Je ne cherche pas une solution qui stocke l'ensemble dans un tableau. Je suis plus curieux de voir s'il existe une solution qui utilise la logique booléenne pour obtenir la réponse.

Je sais que je pouvais faire quelque chose comme ceci:

int baseCase = 5; 
bool testResult = baseCase == 3 || baseCase == 7 || baseCase == 12 || baseCase == 5; 

Je suis curieux de voir si je pouvais faire quelque chose comme ceci:

int baseCase = 5; 
bool testResult = baseCase == (3 | 7 | 12 | 5); 

Il est évident que la volonté fonctionne pas, mais je suis intéressé à voir s'il y a quelque chose de plus succinct que mon premier exemple, qui doit répéter la même variable encore et encore pour chaque valeur de test.

MISE À JOUR:
j'ai décidé d'accepter la réponse de CoreyN comme il semble que l'approche la plus simple. C'est pratique, et toujours simple à comprendre pour un novice, je pense. Malheureusement, là où je travaille, notre système utilise le framework .NET 2.0 et il n'y a aucune chance de mettre à jour de sitôt. Y at-il d'autres solutions qui ne tiennent pas compter sur le .NET Framework 3.5, en plus le plus évident que je peux penser à:

new List<int>(new int[] { 3, 6, 7, 1 }).Contains(5); 
  0

Voici un .NET 2.0 solution, un peu plus complexe que celle de Corey: http://stackoverflow.com/questions/18407#153037 30 sept.. 082008-09-30 13:38:51

  0

Un exemple javascript http://stackoverflow.com/questions/12116326 21 janv.. 152015-01-21 21:23:45

16
 bool b = new int[] { 3,7,12,5 }.Contains(5); 

0

J'utilise habituellement de solutionCoreyN pour les cas simples comme cette. Quelque chose de plus complexe, utilisez une requête LINQ.


-1

Puisque vous n'avez pas spécifié quel type de données vous avez en entrée, je vais supposer que vous pouvez partitionner votre entrée en puissances de 2 -> 2,4,8,16 ... Cela vous permettra d'utiliser les bits pour déterminer si votre valeur de test est l'un des bits de l'entrée.

4 => 0000100
16 => 0010000
64 => 1000000

en utilisant quelques calculs binaires ...

TestList = 4 + 16 + 64 => 1010100
TestValue = 16
TestResult = TestList & TestValue


1

Vous pouvez faire quelque chose de similaire avec .NET 2.0, en tirant profit du fait qu'un tableau o f T implémente IList <T>, et IListT > a une méthode Contient. Par conséquent, ce qui suit est équivalent à la solution .NET 3.5 de Corey, bien que de toute évidence moins claire:

bool b = ((IList<int>)new int[] { 3, 7, 12, 5 }).Contains(5); 

J'utilise souvent IList <T> pour les déclarations de tableau, ou au moins pour passer des arguments de tableau à une dimension. Cela signifie que vous pouvez utiliser des propriétés IList telles que Count, et passer facilement d'un tableau à une liste. Par exemple.

private readonly IList<int> someIntegers = new int[] { 1,2,3,4,5 };