C# 8 Mejoras de coincidencia de patrones
C# 7 sentó las bases para la coincidencia de patrones, pero muchas características tuvieron que dejarse en a un lado. Con el tiempo extra que C# 8 necesita, muchos de estos se están recogiendo.
Coincidencia de patrones posicionales
Considera este patrón bastante detallado utilizando la sintaxis C# 7.
case Rectangle r when r.Length == 10 && r.Width == 10: return "Found 10x10 rectangle";
Al aprovechar la función deconstructor, la nueva coincidencia de patrón posicional hace que la función sea mucho menos detallada.
case Rectangle (10, 10): return "Found 10x10 rectangle";
Esta característica también será compatible con tuplas anónimas. Esto se conoce como un "patrón de tupla".
Coincidencia de patrones de propiedad
El patrón posicional es conciso, pero solo funciona si tienes un método de deconstrucción adecuado. Cuando no lo tengas, puedes usar un patrón de propiedad en su lugar.
case Rectangle {Width : 10 }: return "Found a rectangle with a width of 10";
El soporte para las propiedades indexadas también se está considerando, pero no se han determinado los detalles.
Mejoras deconstructor
Otra idea que se está considerando en los problemas de Open LDM en el ticket de coincidencia de patrones es permitir múltiples métodos de deconstrucción con el mismo número de parámetros. Además de tener diferentes tipos, los parámetros deben tener un nombre diferente.
ITuple Pattern Matching
La interfaz ITuple, presentada en .NET 4.7.1 y .NET Core 2.0, plantea varias preguntas en C# 8. La idea básica es que si un objeto implementa esta interfaz, puede participar en la coincidencia de patrones. Se están considerando tres escenarios con respecto a cuándo entrará en vigencia.
if (x is ITuple(3, 4)) // (1) permitted? if (x is object(3, 4)) // (2) permitted? if (x is SomeTypeThatImplementsITuple(3, 4)) // (3) permitted?
Una pregunta relacionada es si una clase implementa ITuple y hay un método de extensión Deconstruct, ¿cuál tiene prioridad? Idealmente, devolverían los mismos valores, pero se necesita un desempate cuando ese no sea el caso.
Hasta aquí llegamos con este Tema. Ahora te dejamos el enlace de tres cursos presenciales que puedes visitar.
Curso de Excel
curso de Javascript
curso de C#