An Array stores Objects, which since everything in .NET is derived from Object that means it could store anything. A Generic collection on the other hand stores on the type specified
Object[]arr = new Object[5];
arr[0] = new Foo();
arr[1] = new Bar();
arr[2] = 1;
arr[3] = string.empty;
All of these are valid but you expected a string or an integer in the array that would cause a lot of problems.
List<Foo> list = new List<Foo>();
This of course will only allow objects of type Foo so you know the collection only has Foo objects.
Foo[] arr = new Foo[5];
True this will accomplish almost the same thing. However, a generic list give several other methods that are not available, such as, Add, Remove, Clear that make working with collections much easier.