From MSDN:
The foreach statement repeats a group of embedded statements for each element in an array or an object collection that implements the System.Collections.IEnumerable or System.Collections.Generic.IEnumerable(Of T) interface.
So, it's not necessarily Array. It could even be a lazy collection with no idea about the count of items in the collection.