編集: VB.NET で Case ORing が許可されていないと仮定したのは間違っていたようです。私は C# と IL で考えていましたが、間違っていたようです。
ただし、誰かが指摘したように、コードが機能しなかった理由は、Case 2 Or 3 が 2 Or 3 をビット単位の or として評価していたため、Case 3 に評価されたためです。
明確にするために:
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
ただし、パフォーマンスのために、そのような構造を使用すべきではないことを指摘する必要があると思います。コンパイラが Select ステートメント (C# の switch) に遭遇すると、ルックアップ テーブルとswitch MSIL 命令を使用してそれらをコンパイルしようとしますが、 Case 1,2,11,55のようなものがある場合、コンパイラは変換できません。それをルックアップ テーブルに変換すると、一連の比較を使用する必要があります (これは、If.. Else を使用するようなものです)。
ポイントは、Select ステートメントを実際に利用するには、それを念頭に置いてケースを設計する必要があるということです。それ以外の場合、唯一の利点はコードの読みやすさです。
適切に設計されたスイッチは O(1) 操作ですが、設計が不十分なスイッチ (一連の If..Then..Else ステートメントと同等) は O(n) 操作です。