foreach enumerates through a collection faster then using for and accessing that collection by index. for is for looping when you know the starting and ending conditions, or for more general purpose looping.
everything you can do with a for() loop, you can do with a do....while loop, it's really just a shorthand. in the same way that foreach is a shorthand for a for loop something like this (psuedocode):
enumerator = collection.GetEnumerator();
for(loopvalue=enumerator.GetFirst();!Enumerator.HasItems();loopvalue=enumerator.GetNext())
{
}
instead of
foreach(loopvalue in collection)
{
}
the second one is a little easier to read