No. El objeto devuelto por Split (que pasa a ser una matriz, pero lo mismo se aplica a otros objetos enumerables) es lo que define el ciclo después de todo. Si tiene cero o un millón de elementos, es el que define el cero o el millón de iteraciones, lo que no podría hacer si siguiera llamándose.
Para un poco más de detalle, el código producido se convierte en equivalente a:
string[] temp = installerEmails.Split(',');
var enumerator = temp.GetEnumerator();
try
{
while(enumerator.MoveNext())
{
string email = (string)enumerator.Current;
Console.WriteLine(email);
}
}
finally
{
if(enumerator is IDisposable)
((IDisposable)enumerator).Dispose()
}
Como se puede ver, .Split()
se llama sólo una vez.
+1: buena pregunta –
posible duplicado de [¿Cómo funciona Foreach al alternar entre los resultados de la función?] (Http://stackoverflow.com/questions/1632810/how-does-foreach-work-when-looping-through -function-results) –