String extension method that truncates at sentence punctuation
It's an interesting problem isn't it :) 

Here's my extension method that does the same (stripped of some additional options)

public static string TruncateTo(
    this string input,
    int truncateLength,
    bool addEllipsis = true)
{
    // Check to see if we even need to bother truncating
    if (string.IsNullOrWhiteSpace(input) || input.Length &lt;= truncateLength)
        return input;

    // copy the input
    var temp = input;

    // Define a list of characters that we can safely break on
    char[] anyOf = { '.', ',', ';', ':', '?', '!' };

    // LastIndexOfAny starts at the max position works backwards thru' the string
    var truncatePosition = temp.LastIndexOfAny(anyOf, truncateLength);

    // no appropriate place to truncate. 
    if (truncatePosition == -1)
    {
        // Return original string but you could fall back to splitting on last space
        return temp;
    }
    temp = temp.Substring(0, truncatePosition + (addEllipsis ? 0 : 1));
    return addEllipsis
        ? temp + "..."
        : temp;
}


I've added comments but I think the code is pretty clear. I've also modified the code a fair bit as we support quite a few different ways of deciding where to split.

You'll also notice that it's greedy - I.e. it tries to keep the string as long as possible.