¿Cómo funciona foreach cuando se recorren los resultados de la función?

Supongamos que tengo el siguiente código:

foreach(string str in someObj.GetMyStrings())
{
    // do some stuff
}

SerásomeObj.GetMyStrings() Ser llamado en cada iteración del bucle? Sería mejor hacer lo siguiente en su lugar:

List<string> myStrings = someObj.GetMyStrings();
foreach(string str in myStrings)
{
    // do some stuff
}

?

Respuestas a la pregunta(4)

Su respuesta a la pregunta