Edit: Il semble que j'ai eu tort de supposer que VB.NET n'autorise pas le Cas ORing. Je pense, en C# et IL et il semble que j'avais tort.
Cependant, comme quelqu'un l'a souligné, la raison de votre code n'a pas de travail était parce que les Cas 2 Ou 3 a été évalué à 2 Ou 3 comme un or et donc l'évaluation de Cas 3.
Pour plus de précision:
2 binary = 0000 0010
3 binary = 0000 0011
2 Or 3 binary = 0000 0011 (= 3)
Select Case 2
Case 0 '--> no match
Case 1 '--> no match
Case 2 Or 3 '(equivalent to Case 3 --> no match)
End Select
Cependant, je pense que je me dois de souligner que, pour des raisons de performances, il ne faut pas utiliser de telles constructions. Lorsque le compilateur rencontre Select (C#), il va essayer de les compiler en utilisant des tables et le commutateur MSIL instruction, mais dans le cas où vous avez quelque chose comme Cas 1,2,11,55 le compilateur ne sera pas en mesure de convertir un tableau de recherche et il faudra utiliser une série de comparaisons (qui est comme l'utilisation de if.. Else).
Le point est que pour vraiment profiter de l'instruction Select, les cas doivent être conçus dans cet esprit. Sinon, le seul avantage est la lisibilité du code.
Un commutateur est un O(1) opération alors qu'un mal conçu (ce qui est équivalent à une série de if..then..Else) est un O(n) opérations.