Format capital letters at the start of a sentence
Multispace bug

There is one flaw in this solution. It assumes a perfectly formatted sentence. This means that if there are multiple spaces between sentences the formatting won't work. For example it turns this "foo.  bar!    baz?" into "Foo.  bar!    baz?"

To fix this you either need another extension fixing all multiple spaces with a single one or make this one aware of this problem.


if (source[index] == ' ')
{
  index++;
}



This if should contain a continue but even with it, it won't work yet because the first if won't pass the second time. The logic is more complex and it would require a flag to skip "" spaces.



Trim


result.Append(source.First().ToUpper());



You assume that the first char is the first letter but you don't trim the source in case it isn't.



Naming


if (IsPunctuationMark(source[i]))
{
    int index = i + 1;
    if (index &gt;= source.Length || IsPunctuationMark(source[index]))
    {
        continue;
    }
    if (source[index] == ' ')
    {
        index++;
    }
    result.Append(' ');
    result.Append(source[index].ToUpper());
    i += index - i;
}



Here I find the index too general. It looks like it should be called e.g. firstLetterIndex.

Alternative? ;-)

You could use regex to clean-up the string.

public static string CapitalizeSentence(this string source)
{
    return 
        Regex
            .Replace(
                source.Trim(), 
                @"(^|(?&lt;Punctuation&gt;[.!?])\s*)(?&lt;FirstLetter&gt;[a-z])", 
                m =&gt; 
                    $"{(m.Groups["Punctuation"].Success ? m.Groups["Punctuation"].Value + " " : string.Empty)}" +
                    $"{m.Groups["FirstLetter"].Value.ToUpper()}");      
}