Le code suivant crée une instance intermédiaire de List<string>
et lui ajoute des valeurs avant que yield ne le renvoie. Existe-t-il un bon moyen d'éviter la création de l'instance et le rendement renvoie directement les valeurs de la cellule?Retour au niveau de retour IEnumerable <IEnumerable <...>>
IEnumerable<IEnumerable<string>> GetStrValues()
{
......
foreach (var r in rows)
{
var row = new List<string>();
foreach (var c in r.Cells())
{
var value = getCellStr(c);
row.Add(value);
}
yield return row;
}
}
}
Curieusement, si je veux flatter le résultat comme 'IEnumerable', devrais-je changer le premier '.Select (' à '.SelectMany ('? –
ca9163d9
@ dc7a9163d9: oui, c'est exactement ce que 'SelectMany' est pour, et utilise toujours l'exécution différée, donc c'est ce que vous devriez utiliser si votre intention est d'aplatir les résultats. – Groo