Getting single element or throwing one of two exceptions
I don't really like the second while condition count++ &lt; 1 because IMO it is to hard to grasp at first glance when this condition really comes true.  

I would do it without a loop but with simple if statements like so  

public static T Single2&lt;T&gt;(this IEnumerable&lt;T&gt; source)
{
    using (var enumerator = source.GetEnumerator())
    {
        if (enumerator.MoveNext() == false)
        {
            throw new EmptySequenceException();
        }
        var single = enumerator.Current;
        if (enumerator.MoveNext())
        {
            throw new MoreThanOneElementException();
        }
        return single;
    }
}  


Now you don't have a count anymore hence no switch either. I have not used the ! operator on purpose, because having two calls to MoveNext() in two different if condition one checking for false and the other for true harms the readability a little by using that operator.