If I wanted to create a method that takes an instance of IList
as a parameter (or any other interface, but let's use IList
as an example), I could create a generic method with a type constraint, e.g.:
public static void Foo1<T>(T list) where T : IList
{
}
Alternatively, I could create a method that takes an IList
parameter directly:
public static void Foo2(IList list)
{
}
For all intents and purposes, it seems like these methods behave exactly the same:
List<string> myList = new List<string>();
Foo1(myList);
Foo2(myList);
So here's my question -- what's the difference between these two approaches? It seems like the second approach is slightly more readable; are there any other differences I should be aware of (different IL being generated, etc)? Thanks in advance.