The compiler compiles a foreach loop into something like a for loop when the foreach is used with an array. And the compiler compile
foreach
for
It's purely syntactic sugar in that you could obtain the same behaviour without it, yes. Many other things are the same... for, while etc... To misquote Archimedes: "Give me if and goto, and I will move the code..."
while
if
goto
No, the CLR doesn't have any concept of foreach.