Crazy Things I Did Before Generic Variance

public class stuff : IEnumerable<Thing>, IEnumerable<IThing> { … }
public static void Main() {
  stuff s;
  var names = s.Select(t=>t.Name);
}

And even though System.Linq is imported, I still get an error “stuff" does not contain a definition for Select and no extension method ‘Select’ accepting a first argument of type ‘stuff’ could be found (are you missing a using directive or an assembly reference?)

Well, no, but LINQ and extension methods on IEnumerable<T> doesn’t work when the T is ambiguous. If I were to cast the above “s” to one of IEnumerable<Thing> or IEnumerable<IThing>, then I could use LINQ, but until I do, I get nothing. The error message isn’t all that helpful either.

My general recommendation: don’t do this.