No. L'oggetto restituito da Split (che si verifica essere un array, ma lo stesso vale per altri oggetti enumerabili) è ciò che definisce il ciclo dopo tutto. Se ha zero o un milione di elementi, è esso che sta definendo zero o milioni di iterazioni, che non potrebbe fare se continuasse a essere chiamato.
Per un po 'più in dettaglio, il codice prodotto diventa 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()
}
Come si può vedere, .Split()
viene chiamato solo una volta.
fonte
2010-10-14 14:50:52
+1: buona domanda –
possibile duplicato di [Come funziona foreach durante il looping dei risultati delle funzioni?] (Http://stackoverflow.com/questions/1632810/how-does-foreach-work-when-looping-through -funzione-risultati) –