Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

18 años online

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
martes, 17 de abril de 2018
C# 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:
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:

Albert Capdevila dijo...

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.

José María Aguilar dijo...

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!