String Extension improvement
You should remove this

length = length + namelist.Count() - 1;


because length already includes the spaces.

This 

length = length - namelist[i].Length;


should be

length -= namelist[i].Length - 1;


because namelist[i].Length-1 is the number of characters that are removed.

Also: why i &gt;=1 - 1 instead of i &gt;= 0?

You can also do it in a single loop like this:

        for (var i = namelist.Count() - 2; i &gt;=1 &amp;&amp; length &gt; 20; i--)
        {
            length -= namelist[i].Length - 1;
            namelist[i] = namelist[i].Substring(0, 1);
        }

        return string.Join(" ", namelist);