Sí/No.
Ningún lenguaje tradicional con una instrucción "cambiar" tiene esto. Existe en algo llamado "coincidencia de patrones".
C#, Java, PHP y Python no son compatibles con la coincidencia de patrones (no estoy completamente seguro de PHP, pero no creo que lo haga. Corrígeme si me equivoco).
Aquí hay un ejemplo en Haskell donde existe la coincidencia de patrones. La coincidencia de patrones se encuentra en muchos lenguajes de estilo funcional.
function 1 _ = "first parameter has a one"
function _ 1 = "second parameter is a one"
function _ _ = "I don't know what crazy number you passed in"
Cuando esta función se llama, el tiempo de ejecución/compilador/el que comprueba que será ver si la primera función puede ser llamada. Si puede, devuelve ese valor. Luego continúa hasta que pueda encontrar una coincidencia que funcione para los parámetros dados. El "_" es solo una forma de decir, "cualquier cosa puede estar aquí, y realmente no me importa qué es, así que no vincule el valor con un nombre". Si me importaba el valor, que podía hacer:
function 1 a = "second parameter is " ++ (show a)
Ahora, ya que por lo general va de arriba hacia abajo (a diferencia de la instrucción switch), esto es más parecido a un if/else de una sentencia switch que acaba salta a el lugar correcto Es un aspecto muy bonito si/else. Además, si lo reordenaba para que el caso más general estuviera en la parte superior del archivo, los otros casos serían ignorados.
También puede hacer algo similar con las plantillas, pero eso solo funcionará en tiempo de compilación.
De hecho, es común que los lenguajes funcionales (F #, ML, Haskell) para tener una característica, como se ha señalado Mateo Willis : http://stackoverflow.com/questions/5436983/can-the-switch-statement-have-more-than-one-variable/5437014#5437014 – Gabe