No. The object returned by Split (which happens to be an array, but the same applies to other enumerable objects) is what defines the loop after all. If it has zero or a million items, it is it that is defining the zero or million iterations, which it couldn't do if it kept being called.
For a bit more detail, the code produced becomes equivalent to:
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()
}
As you can see, .Split()
is called only once.