Obtener los nombres de meses del calendario sin hardcoding en C#
En varias aplicaciones que proveen un dropdownlist para escoger el nombre de un Mes, he visto que los desarrolladores llenan los nombres de los meses a través de un archivo de recursos, o peor, hard-codeando los valores. Esto no es necesario, ya que los nombres de los meses del calendario de cada cultura pueden ser accesados a través de un objeto CultureInfo que represente la cultura del país/idioma para el cual queremos obtener los meses.
Lo primero es agregar un using de System.Globalization.
El siguiente metodo va a imprimir todos los meses del año del calendario del objeto CultureInfo que le pasemos.
Generalmente vamos a querer que los nombres empiecen con mayúsculas, así que también estoy usando el método ToTitleCase, que va a formatear correctamente los nombres de los meses a TitleCase según el formato correcto de la cultura tambien.
public static void ImprimirNombreMeses(CultureInfo cultura) { // Primera manera, LINQ var qry = from m in cultura.DateTimeFormat.MonthNames select cultura.TextInfo.ToTitleCase(m); foreach (var mes in qry) { Console.WriteLine(mes); } // Segunda manera, tipico foreach foreach(string mes in cultura.DateTimeFormat.MonthNames) { Console.WriteLine(cultura.TextInfo.ToTitleCase(mes)); } Console.ReadLine(); }
La primera parte del método usa LINQ. Si estás usando una version anterior al framework 3.5, tendrías que ciclar usando un foreach.
El resultado se ve así:
Esta es una de las tantas razones por las cuales me gusta el .NET Framework. Si lo necesitas, probablemente ya esté integrado.