Cómo buscar patrones de búsqueda o coincidencias en C# dentro de un bucle swith
Supongamos que tenemos una cadena de texto, y que dependiendo de una palabra, queremos que nuestro código busque en la cadena de texto la correspondiente coincidencia de esa palabra con el objetivo de hacer una u otra cosa.
Seguramente lo primero que pensaremos es que para que funcione, bastaría con pasar todo a if.
Imaginemos ahora que la cantidad de posibles palabras a buscar sea realmente elevada.
Estará conmigo en que una secuencia de if else ahí, puede ser demasiado extensa si el número de opciones es considerablemente alta, y a la postre, podría convertirse en un código difícil de leer y/o mantener.
Bien, llegados a este punto podríamos pensar en utilizar switch.
Sería algo «más» limpio y sería una posible solución válida, así que poniéndonos manos a la obra haríamos algo así cómo:
string data = "Ejemplo de test"; var result = String.Empty; switch (data) { case data.Contains("demo"): result = "DEMO"; break; case data.Contains("prueba"): result = "PRUEBA"; break; case data.Contains("test"): result = "TEST"; break; default: break; }
Sin embargo, este ejemplo de código no funcionará.
La compilación de switch requiere que el texto sea considerado constante y en este caso, el compilador nos devolverá un ArgumentNullException indicándonos que no puede convertir implícitamente el tipo bool a string, por lo que no nos permitirá compilar el código.
Ahora bien, ¿cómo resolver este problema?.
¿Existe alguna manera de poder hacerlo?.
La respuesta es sí.
Utilizando C# 7.0 ó superior.
Gracias a switch statements with patterns podemos hacer algo que resolvería nuestro problema inicial.
De esta manera y en nuestro ejemplo, podemos analizar que dentro de una cadena ocurra diferentes casuísticas que a través de una cláusula switch recorreríamos para realizar la acción que considerarámos adecuada para cumplir nuestras condiciones que habríamos hecho en un if else.
Por lo tanto, el ejemplo anterior utilizando switch statements with patterns quedaría de la siguiente forma:
string data = "Ejemplo de test"; var result = String.Empty; switch (data) { case string info when info.Contains("demo"): result = "DEMO"; break; case string info when info.Contains("prueba"): result = "PRUEBA"; break; case string info when info.Contains("test"): result = "TEST"; break; default: break; }
Espero que este ejemplo ayude a ver las posibilidades que swith statements with patterns nos puede presentar a la hora de resolver situaciones como la presentada.
Happy Coding!
2 Responsesso far
Hola,
Bien por explicar y recordar el uso de «swith statements with patterns» pero el ejemplo para su aplicación no creo que sea el mejor.
Con el problema propuesto, creo que hay mejores soluciones que el uso de «switch».
Es mi opinión.
Un saludo
Hola Javier.
Indudablemente hay muchas formas diferentes de resolver un problema, y en este caso se me ocurren varias, pero la idea era la de cómo resolverlo utilizando lo que el lenguaje en sí nos ofrece.
Quizás efectivamente, no sea el mejor ejemplo del uso de esta característica del lenguaje, pero tómese únicamente como lo que es, un ejemplo.
¡Muchas gracias por comentar!