컬렉션에서 연속 된 값의 수를 찾기 위해 확장 메소드를 만들었습니다. 일반이기 때문에 발신자가 "다음"값의 존재를 확인하기 위해 값을 증가시키는 Func <> "증분"을 정의 할 수 있습니다.사용자 지정 열거자를 사용하여 무한 재귀를 피하는 방법은 무엇입니까?
그러나 호출자가 부적절한 증분 자 (예 : x => x)를 전달하면 무한 재귀 루프가 발생합니다. 이 문제를 방지 할 수있는 확실한 제안이 있으십니까?
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;
}
간단한 솔루션은 발신자를 작성하는 사람이 정상적인 사람이라고 가정하는 것입니다. 때때로 당신은 당신보다 위의 사람을 비난해야합니다. 그러나 이것은 흥미로운 질문이므로 다른 사람들이 테이블에 가져올 수있는 것을보고 싶습니다. – Polynomial
[정지 문제] (http://en.wikipedia.org/wiki/Halting_problem)? –
IEnumerable이 크고 인접한 (증분자를 제공 한) 경우 StackOverflowExceptions의 영향을받습니다. –