Hice un método de extensión para encontrar el número de valores consecutivos en una colección. Debido a que es genérico, le permito a la persona que llama definir el "incrementor" que es un Func <> que se supone que incrementa el valor para verificar la existencia de un "próximo" valor.¿Cómo evito la recursión infinita con un enumerador personalizado?
Sin embargo, si la persona que llama pasa un incremento impropio (es decir, x => x), producirá un bucle recursivo infinito. ¿Alguna sugerencia sobre una forma limpia de prevenir esto?
public static int CountConsecutive<T>(this IEnumerable<T> values, T startValue, Func<T, T> incrementor)
{
if (values == null)
{
throw new ArgumentNullException("values");
}
if (incrementor == null)
{
throw new ArgumentNullException("incrementor");
}
var nextValue = incrementor(startValue);
return values.Contains(nextValue)
? values.CountConsecutive(nextValue, incrementor) + 1
: 1;
}
La solución simple es suponer que la persona que escribe la persona que llama está en su sano juicio. A veces solo tienes que culpar a la persona que está sobre ti. Sin embargo, esta es una pregunta interesante, por lo que me gustaría ver lo que otras personas pueden aportar. – Polynomial
[Detener el problema] (http://en.wikipedia.org/wiki/Halting_problem)? –
Si su IEnumerable es grande y contiguo (incrementor dado), esto es susceptible a StackOverflowExceptions. –