Extension method splitting string on each capital letter
With regex it's virtually a one-liner:

var words = 
    Regex.Matches("SmallFireBall", @"([A-Z][a-z]+)")
    .Cast&lt;Match&gt;()
    .Select(m =&gt; m.Value);

var withSpaces = string.Join(" ", words);



Regex.Matches - searches an input string for all occurrences of a regular expression and returns all the matches. MSDN
[A-Z][a-z]+ - matches strings that begin with a capital letter and are followed by one or more lowercase letters


Output:


  Small Fire Ball




Let's review your code anyway and optimize it a little bit. Even without regex it still can be very short.


Use a StringBuilder for building string dynamically
You can use a foreach loop for strings too

public static string SplitOnCapitalLetters2(this string inputString)
{
    var result = new StringBuilder();

    foreach (var ch in inputString)
    {
        if (char.IsUpper(ch) &amp;&amp; result.Length &gt; 0)
        {
            result.Append(' ');
        }
        result.Append(ch);
    }
    return result.ToString();
}





The 3rd alternative would be only LINQ:

public static string SplitOnCapitalLetters3(this string inputString)
{
    // starts with an empty string and accumulates the new string into 'result'
    // 'next' is the next character
    return inputString.Aggregate(string.Empty, (result, next) =&gt;
    {
        if (char.IsUpper(next) &amp;&amp; result.Length &gt; 0)
        {
            result += ' ';
        }
        return result + next;
    });
}