मैंने संग्रह में लगातार मूल्यों की संख्या को खोजने के लिए एक विस्तार विधि बनाई है। चूंकि यह सामान्य है, इसलिए मैं कॉलर को "incrementor" को परिभाषित करने की अनुमति देता हूं जो एक Func <> है जो "अगले" मान के अस्तित्व की जांच के लिए मान को बढ़ाने के लिए माना जाता है।मैं एक कस्टम गणक के साथ अनंत रिकर्सन से कैसे बचूं?
हालांकि, फोन करने वाले एक अनुचित incrementor गुजरता है अगर (अर्थात एक्स => 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)? –
यदि आपका आईन्यूमेरेबल बड़ा और संगत (दिया गया incrementor) है, तो यह StackOverflowExceptions के लिए अतिसंवेदनशील है। –