iferença entre interface como restrição de tipo e interface como parâmetr

Se eu quisesse criar um método que toma uma instância deIList como parâmetro (ou qualquer outra interface, mas vamos usarIList como exemplo), eu poderia criar um método genérico com uma restrição de tipo, por exemplo

public static void Foo1<T>(T list) where T : IList
{

}

lternativamente, eu poderia criar um método que leva umIList parâmetro diretamente:

public static void Foo2(IList list)
{

}

ara todos os efeitos, parece que esses métodos se comportam exatamente da mesma maneir

List<string> myList = new List<string>();
Foo1(myList);
Foo2(myList);

Então, aqui está minha pergunta - qual é a diferença entre essas duas abordagens? Parece que a segunda abordagem é um pouco mais legível; existem outras diferenças que eu deva estar ciente (diferentes IL sendo geradas, etc.)? Desde já, obrigado

questionAnswers(5)

yourAnswerToTheQuestion