Effettuo la ricorsione per trovare un valore lungo all'interno di un elenco con più figli che può anche avere figli.Interrompi completamente la ricorsione quando si restituisce qualcosa
seguente metodo:
public TaxonomyData getTaxonomyData(long taxId, List<TaxonomyData> TaxonomyTree, TaxonomyData output)
{
//find taxid in the taxonomy tree list and return the taxonomydata
foreach (TaxonomyData td in TaxonomyTree)
{
if (td.TaxonomyId == taxId)
{
output = td;
//return td; => when doing a return here means I already found a match so it is not necessary to do all the recursion.
}
else if (td.Taxonomy.Length > 0)
{
getTaxonomyData(taxId, td.Taxonomy.ToList(), output);
}
}
return output;
}
E 'possibile quando faccio return td;
(vedi riga commentato) che tutta la mia ricorsione si ferma?
Grazie
Non preoccuparti, accadrà. La ricorsione si fermerà qui. –
Sei sicuro di voler interrompere le chiamate ricorsive per getTaxonomyData? Se stai cercando di evitare il looping innecesmente con il foreach perché hai già il valore che ti serve, allora ciò che devi fare è aggiungere "break"; subito dopo "output = td;" istruzioni. E penso che in questo caso un po 'di tempo sarebbe una soluzione migliore ... –
@Jani: No, la ricorsione * non si fermerà se viene restituita una chiamata profonda, perché la ricorsione sarebbe dalla clausola 'else', che ignora il valore di ritorno, e continua semplicemente con il prossimo elemento di 'TaxonomyTree'. –