C#. NombrePropio

Lamento tener tan abandonado el blog pero es que ando inmerso en un proyecto de aquellos que te absorben mucho más tiempo del que te gustaría. Intentaremos sacar algo de tiempo ahora que, por lo menos ya no tengo clases.

Bueno, hoy le toca el turno a una de aquellas pequeñas cosas a las que, los que vais siguiendo el blog ya estáis acostumbrados. El caso es que el otro día, charlando con el jefe me comenta lo mal que queda que los clientes vean los datos unos en mayúscula, otros en formato Título, otros en minúscula… Sí, vale, tiene razón, queda feo. Con la naturalidad que me caracteriza le digo que no hay problema, que le pongo todo en mayúsculas y que así no hay diferencias pero no tarda en comentarme que eso es antiguo, que lo quiere en Nombre Propio, al igual que la función NOMPROPIO/PROPER del Excel.

Ale… para la “validación” de cualquier dato de texto, nos encontramos con los métodos ToUpper() y ToLower() de la clase System.String, pero no existe un ToNombrePropio() pues intentaremos crearlo nosotros.

El módulo en sí no es complicado puesto que la clase CultureInfo tiene una propiedad TextInfo que nos permitirá acceder a un método ToTitleCase() que ya hace precisamente lo que andábamos buscando.

Por tanto, lo único que nos queda es ponernos manos a la obra intentando seguir las mismas directrices que siguen los métodos ToLower() o ToUpper(), es decir, crear un método sobrecargado que nos permita, en caso necesario, pasar la cultura deseada.

   1: using System.Globalization;
   2: using System.Threading;
   3:  
   4: namespace System
   5: {
   6:     public static class StringExtensors
   7:     {
   8:         /// <summary>
   9:         /// Devuelve una copia de este objeto String en formato Título aplicando
  10:         /// las reglas de la cultura actual
  11:         /// </summary>
  12:         public static string ToNombrePropio ( this System.String  texto )
  13:         {
  14:             return texto.ToNombrePropio(Thread.CurrentThread.CurrentCulture);
  15:         }
  16:  
  17:         /// <summary>
  18:         /// Devuelve una copia de este objeto String en formato título aplicando
  19:         /// las reglas de la cultura especificada
  20:         /// </summary>
  21:         /// <param name="culture">Objeto System.Globalization.CultureInfo que proporciona
  22:         /// reglas de Titulo</param>
  23:         public static string ToNombrePropio( this System.String texto, CultureInfo culture)
  24:         {
  25:             TextInfo ti = culture.TextInfo;
  26:             return ti.ToTitleCase(texto);
  27:         }
  28:     }
  29: }

 

Eso sí, cuando andaba documentándome en la ayuda de Microsoft sobre el método ToTitleCase(), he visto que aparece el siguiente mensaje:

Como se muestra anteriormente, el método ToTitleCase() proporciona un comportamiento de grafía arbitrario que no es necesariamente lingüísticamente correcto. Una solución correcta lingüísticamente requeriría reglas adicionales y el algoritmo actual es algo más sencillo y rápido.Nos reservamos el derecho para hacer esta API más lenta en el futuro

No obstante, en la versión 4.0 del Framework todavía no se ha modificado…

One thought on “C#. NombrePropio

  1. Gracias Admin!

    Esta información es de mucha ayuda, ya que muchos usuarios no entienden la forma correcta de ingresar algunos valores

    SALUDOS!!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *