El foreach es muy útil cuando quieres hacer lectura de todos los elementos de un arreglo ó algo similar.
Por ejemplo:
Desplegaremos todos los datos de un arreglo de caracteres.
char[] Letras = { 'a', 'b', 'c', 'd', 'e' };
foreach (char l in Letras)
Console.WriteLine("La letra es: {0} ", l);
Console.ReadKey();
Eso dará como resultado...
La letra es: a
La letra es: b
La letra es: c
La letra es: d
La letra es: e
La diferencia entre for y foreach, es de que con foreach, es de lectura, eso es que si tu quieres hacer algo como Letras[2]= 'n', no podrás.
Otra diferencia es que con foreach empiezas desde el primer elemento y terminas hasta el último elemento con incremento de 1, mientras con el for, tu puedes indicar de donde hasta donde y también puedes indicar el incremento.
Saludos bro!;