SkipLast of an IEnumerable - Linq Extension
There are 2 cases for which both your and VisualMelon's implementation can be improved:


If count is less than or equal to 0, then you can return source directly. This speeds up iteration by removing an unnecessary intermediate step. For this to work, the yielding part of the method has to be moved into another method, but that's easy with local functions.
If source is ICollection&lt;T&gt; collection, then you can return source.Take(collection.Count - count), which is faster and uses less memory because it doesn't need to buffer anything. The higher count is, the more of a difference this makes.


The first of these is probably not a very useful edge-case, so it might not be worth the extra code, but I would definitely include the second optimization.