Not to long ago I had to write a method to convert lowercase names to proper case for display on a website I was working on. I started rolling my own but then I thought that such a feature would be nice to have in the framework. So I hit google with a query and sure enough the framework authors had thought of it. The method was well hidden though ;)
CultureInfo.InvariantCulture.TextInfo.ToTitleCase("hELLo wORLd"); // Will return "Hello World"
This fits quite well in as an extension method
/// <summary> /// Creates a new string with Title Case (ie "hEllO wORLd" becomes "Hello World") using the Invariant Culture /// </summary> /// <param name="s">The string to convert</param> /// <returns>The string in title case</returns> public static string ToTitleCaseInvariant(this string s) { return ToTitleCase(s, CultureInfo.InvariantCulture); } /// <summary> /// Creates a new string with Title Case (ie "hEllO wORLd" becomes "Hello World") /// </summary> /// <param name="s">The string to convert</param> /// <returns>The string in title case</returns> public static string ToTitleCase(this string s) { return ToTitleCase(s, CultureInfo.CurrentCulture); } /// <summary> /// Creates a new string with Title Case (ie "hEllO wORLd" becomes "Hello World") /// </summary> /// <param name="s">The string to convert</param> /// <param name="ci">The culture to use when creating title case</param> /// <returns>The string in title case</returns> public static string ToTitleCase(this string s, CultureInfo ci) { if (s == null) throw new ArgumentNullException("s"); return ci.TextInfo.ToTitleCase(s); }
Now you can just call the ToTitleCase on your string objects like this:
var s = "george washington"; s.ToTitleCase();