Ho una funzione ricorsiva che restituisce tutti i nodi della sottostruttura, dato il nodo radice iniziale.Ricorsione con elementi di ritorno di resa ordine nell'albero
private IEnumerable<Node> getAllNodesRecursively(Node subnode)
{
foreach (Node node in subnode.Nodes)
getAllNodesRecursively(node);
yield return subnode;
}
Per la seguente struttura ad albero:
A
|
+--B
|
+--C
| |
| +--D
|
+--E
Quando provo a iterare in quanto tale:
foreach (Node n in getAllNodesRecursively(a))
{
Console.WriteLine(n);
}
la funzione restituisce il solo il Valore.
Desidero utilizzare il rendimento-ritorno con ricorsione e recuperare elementi nel Preordine (A, B, C, D, E in questo esempio).
(Se inserisco il rendimento prima del foreach, il foreach non avverrà mai).
È possibile?
Hai provato che il foreach non viene chiamato se si inserisce il rendimento in anticipo? Immagino che verrà chiamato. – okrumnow
Sì, avevi ragione. Il rendimento restituito non salta il resto del codice. Sembra che sia solo uno zucchero sintattico per consentire il ritorno del valore e mantenere comunque attiva la funzione. Colpa mia. –