Removing exact instances of elements in one list from another
Additional to the valid point from Rick Davin:

1) You can drop the Contains because IndexOf returns -1 if the item is not contained.

2) You could use yield to get rid of the additional list 



public static IEnumerable&lt;T&gt; ExceptExact&lt;T&gt;(this IEnumerable&lt;T&gt; source, IEnumerable&lt;T&gt; exceptions)
{
    var tExceptions = exceptions.ToList();

    foreach (var el in source)
    {
        var index = tExceptions.IndexOf(el);
        if (index &gt;= 0)
        {
            tExceptions.RemoveAt(index);
            continue;
        }
        yield return el;
    }
}




After taking a look to MSDN (List.Remove), I figured out that there is even a simpler way:


  Removes the first occurrence of a specific object from the List.
  
  Returns true if item is successfully removed; otherwise, false.This method
  also returns false if item was not found in the List.


public static IEnumerable&lt;T&gt; ExceptExact&lt;T&gt;(this IEnumerable&lt;T&gt; source, IEnumerable&lt;T&gt; exceptions)
{
    var tExceptions = exceptions.ToList();
    return source.Where(el =&gt; !tExceptions.Remove(el));
}