I noticed this the other day, say you have two overloaded methods:
public void Print(IEnumerable items) {
Console.WriteLine(\"IEnumerab
Because the methods generated from the generics Print(Person[] item) and Print(List are a better match than IEnumerable.
The compiler is generating those methods based on your type arguments, so the generic template Print will get compiled as Print(Person[] item) and Print(List (well, whatever type represents a List at compilation). Because of that, the method call will be resolved by the compiler as the specific method that accepts the direct type, not the implementation of Print(IEnumerable.