Hago recursión para encontrar un valor largo dentro de una lista con varios hijos que también pueden tener hijos.Detener la recursión completamente al devolver algo
siguiente método:
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;
}
¿Es posible cuando lo haga return td;
(véase la Fila comentado) que toda mi recursividad se detiene?
Gracias
No se preocupe, que va a pasar. La recursión se detendrá allí. –
¿Estás seguro de que estás hablando de detener las llamadas recursivas a getTaxonomyData? Si está tratando de evitar el bucle innecesariamente con el foreach porque ya tiene el valor que necesita, entonces lo que tiene que hacer es agregar "break"; justo después de "output = td"; instrucción. Y creo que en este caso un tiempo sería una mejor solución ... –
@Jani: No, la recursividad * no * se detendrá si una llamada profunda simplemente regresa - porque la recursión sería de la cláusula 'else', que ignora el valor de retorno, y simplemente continúa con el siguiente elemento de 'TaxonomyTree'. –