La plus succincte façon de déterminer si une variable est égale à une valeur à partir d'une "liste" des valeurs

StackOverflow https://stackoverflow.com/questions/18407

  •  09-06-2019
  •  | 
  •  

Question

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

Je ne suis pas à la recherche d'une solution qui stocke l'ensemble dans un tableau.Je suis plus curieux de voir si il y a une solution qui utilise la logique booléenne, d'une certaine façon à obtenir la réponse.

Je sais que je pourrais 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 de plus comme ceci:

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

Évidemment, le ci-dessus ne fonctionne pas, mais je suis intéressé à voir si il y a quelque chose de plus succincte que mon premier exemple, ce qui a pour répéter la même variable pour chaque valeur de test.

Mise à JOUR:
J'ai décidé d'accepter CoreyN de répondre comme il semble que l'approche plus simple.C'est pratique, et toujours simple pour un novice à comprendre, je pense.

Malheureusement, où je travaille, notre système utilise les .NET framework 2.0 et il n'y a pas de possibilité de mise à niveau à tout moment bientôt.Existe-il d'autres solutions qui ne dépendent pas de la .NET framework 3.5, en plus de la plus évidente, que je pense:

new List<int>(new int[] { 3, 6, 7, 1 }).Contains(5);
Était-ce utile?

La solution

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

Autres conseils

Vous pouvez faire quelque chose de similaire avec .NET 2.0, en profitant du fait qu'un tableau de T implémente IList<T>et IList<T> a un Contient la méthode.Donc la suite est équivalente à Corey de l' .NET 3.5 solution, même si évidemment moins claire:

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

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

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

J'ai l'habitude de l'utiliser CoreyN's solution pour les cas simples comme ça.Quelque chose de plus complexe, l'utilisation d'une requête LINQ.

Puisque vous n'avez pas spécifier de quel type de données 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 de déterminer si votre test de valeur est un des bits de l'entrée.

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

à l'aide de certains binaires math...

testList = 4 + 16 + 64 => 1010100
testValue = 16
verdict = testList & testValue

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top