La clase String posee sendos métodos para convertir todas las letras de un texto a mayúsculas o a minúsculas. Curiosamente no ofrece otros me´todos que también serían útiles como por ejemplo uno que he necesitado hoy: convertir el texto a formato título (es decir la primera letra de cada palabra en mayúsculas).

Para este tipo de casos sería estupendo que la clase que nos interesa dispusiese de este método. Así, en mi ejemplo, lo que me gustaría es que la clase String tuviese un método ToTitle que convirtiera mis cadenas al formato apropiado para este caso.

Pues gracias a la "magia" de los métodos extensores de C# 3.0 conseguirlo es muy fácil.

Lo primero es crear un método que nos permita conseguir ese formato que queremos. Hay muchas formas de hacerlo. la más obvia es ir buscando espacios en la cadena y sustituir el siguiente caracter por el mismo en mayúsculas, pero es es algo muy ineficiente. La plataforma .NET nos da ya hecho esto gracias a la clase TextInfo de System.Globalization que ya posee un método ToTitleCase que hace precisamente esto.

Así basta con definir un método extensor en una clase auxiliar, así:

using System.Globalization;
using System.Threading;

namespace
Krasis.MetodosExtensores { public static class Extensores { public static string ToTitle(this string s) { CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture; TextInfo textInfo = cultureInfo.TextInfo; return textInfo.ToTitleCase(s); } } }

Para que a partir de ahora podamos escribir lo siguiente en nuestras cadenas (siempre que inlcuyamos el espacio de nombres Krasis.MetodosExtensores, claro:

miTexto.ToTitle()

Veámoslo en acción en un código real:

Como vemos se usa igual que cualquier método normal de la clase String, y laúnica evidencia es que en el Intellisense vemos una flechita azul (como en la figura) para indicar que es un método extensor. Mola ¿eh? :-)

Nota: Podríamos usar InvariantCulture en lugar de la cultura actual si queremos hacerlo independiente del idioma del usuario actual (por ejemplo para guardarlo en una base de datos).

Lectura recomendada: Libro "C# 3.0 y Linq" de Octavio Hernández.

Escrito por un humano, no por una IA