Let the code speak :-)
namespace tests
{
       [TestClass]
       public class string_extension_tests
       {
              [TestMethod]
              public void
when_formatting_title_case_to_delimited_but_the_delimiter_is_not_specified()
              {
                     var s = "ThisIsTheDayThatTheLordHasMade";
                     var formated =
s.TitleCaseToDelimited();
                     const string expected = "This Is The Day That The Lord Has Made";
                     Assert.AreEqual(expected,
formated);
              }
              [TestMethod]
              public void
when_formatting_title_case_to_delimited_and_the_delimiter_is_specified()
              {
                     var s = "ThisIsTheDayThatTheLordHasMade";
                     var formated =
s.TitleCaseToDelimited("_");
                     const string expected = "This_Is_The_Day_That_The_Lord_Has_Made";
                     Assert.AreEqual(expected,
formated);
              }
       }
       /// 
       /// String helpers
       /// 
       public static class StringExtensions
       {
              /// 
              /// It converts a string with the format of
"ThisIsTheDayThatTheLordHasMade" to "This Is The Day The Lord
Has Made"
              /// insprired by the conversation here:
http://stackoverflow.com/questions/155303/net-how-can-you-split-a-caps-delimited-string-into-an-array
              /// Limitation: this will split all upper cased letters into
separate words.  I don't have a need to for consecutive upper
/// case words to be as one word so go YAGNI.
/// case words to be as one word so go YAGNI.
              /// 
              /// 
              /// 
              /// 
              public static string TitleCaseToDelimited(this string str, params string[] delimiters)
              {
                     //if there is no data, let's waste our breath
                     if (string.IsNullOrWhiteSpace(str))
return str;
                     //if no delimiter specified, use space
                     string delimiter;
                     if (delimiters.Length == 0 || string.IsNullOrWhiteSpace(delimiters[0]))
delimiter = " ";
                     else delimiter = delimiters[0];
                     //regex does the magic
                     return Regex.Replace(str, "(\\B[A-Z])",
delimiter + "$1");
              }
       }
}