martes, 17 de abril de 2018
Va un truquillo muy rápido que, aparte de al que os habla, quizás a alguno más os provoque un momento “ahh, pues claro, cómo no se me había ocurrido antes” ;)
Y es que el problema con las costumbres es que son difíciles de quitar; por ejemplo, probablemente muchos estamos acostumbrados a obtener el nombre de los miembros de un enum de la siguiente forma:
Aun a sabiendas de que el operador
El siguiente código, totalmente equivalente al anterior, muestra cómo podemos utilizar este operador para obtener el nombre del miembro:
Publicado en Variable not found.
Y es que el problema con las costumbres es que son difíciles de quitar; por ejemplo, probablemente muchos estamos acostumbrados a obtener el nombre de los miembros de un enum de la siguiente forma:
public enum Color { Red, Green, Blue }
static void Main(string[] args)
{
Console.WriteLine(Color.Red.ToString());
// Output: Red
}
A priori es correcto: llevamos años haciéndolo así y no nos ha ido mal del todo. Bueno, o sí, pero probablemente no por este motivo ;)Aun a sabiendas de que el operador
nameof
existe desde hace ya bastante tiempo y habiéndolo utilizado en muchas ocasiones, a veces la costumbre hace que no nos planteemos otros casos de uso, como con los enum que veíamos arriba.El siguiente código, totalmente equivalente al anterior, muestra cómo podemos utilizar este operador para obtener el nombre del miembro:
public enum Color { Red, Green, Blue }
static void Main(string[] args)
{
Console.WriteLine(nameof(Color.Red));
// Output: Red
}
Fijaos que, además de que sigue siendo tipado fuerte, acabamos de conseguir un microbeneficio adicional: nos hemos llevado a tiempo de compilación (porque, recordad, nameof
se resuelve en compilación) la obtención del nombre, por lo que el rendimiento será mejor que la llamada a ToString()
, que es resuelta en tiempo ejecución.Publicado en Variable not found.
2 Comentarios:
Truco interesante que da para pensar.
Lo malo es cuando el enum tiene un valor cuyo descriptivo se forma con más de una palabra. Color "azul eléctrico" por ejemplo. En esos casos mi solución es utilizar atributos en los valores del enum.
Hola!
Claro, este sistema no valdría en esos escenarios, ni en otros, como los casos extremos que planteaba Javier Campos vía Twitter: https://twitter.com/javiercampos/status/986540548176662528.
La reflexión va simplemente en la línea de que a veces estamos tan acostumbrados a hacer las cosas de una forma que obviamos nuevas adiciones al lenguaje (como el nameof()), obviamente en aquellos casos en los que encaje bien :)
Gracias por comentar!
Enviar un nuevo comentario