http://stackoverflow.com/a/434765/639619
Really the only reason to ever use an array is if you're going to be using the data in it a lot (e.g. 1000s of loops through it), if you need it for serialization/marshaling purposes, or someone else build an interface that uses arrays.  If you do the standard thing and use List<T> for nearly everything this can often destroy whatever performance benefits were gained by said library author using an array, as converting between the two requires a memcpy of the contents for both directions.

List<T> access is about 50% slower on average, but keep in mind I've seen benchmarks for this on the .NET platform vary by over a factor of 2 between process restarts, presumably due to cache alignment issues.