For Each cust as Customer in Customers
Why stop there?
Why do I even have to (re-)define what the objects in Customers are?
Why can't I just write
for each whateverthehecktheobjectsareinmycollection in Customers
and have .net look at that and say “well d'uh, I know what whateverthehecktheobjectsareinmycollection is going to be because Customers is filled with Customer objects, so I will just implicitly cast the whateverthehecktheobjectsareinmycollection to a Customer.
Say that your collection is of strongly types with "IAnimal" but what you really want to do is loop on all ICarnivors in the collection and operate on their methods.
How do you tell the compiler to do that?
A solution would be to say "OK, you can use the old syntax or the new syntax,. With the new syntax the object defaults to whatever the collection is of (IAnimal in this case). But that leads to less readable code (Remember what happens in VB6 when you declare something without specifying a type? It's a variant. And find me a good developer that says its OK to declare a variable as variant simply by omitting the type at declaration. None. It's simply less readable.)