मेरे पास है एक IEnumerable<T>
तरीका है जो मैं WebForms पेज में नियंत्रण खोजने के लिए उपयोग कर रहा हूं।
विधि पुनरावर्ती है और मुझे कुछ प्रकार की समस्याएं आ रही हैं जो मैं चाहता हूं कि जब मैं yield return
पुनरावर्ती कॉल का मूल्य वापस कर रहा हूं ।
मेरा कोड इस प्रकार दिखता है:
public static IEnumerable<Control>
GetDeepControlsByType<T>(this Control control)
{
foreach(Control c in control.Controls)
{
if (c is T)
{
yield return c;
}
if(c.Controls.Count > 0)
{
yield return c.GetDeepControlsByType<T>();
}
}
}
यह वर्तमान में "अभिव्यक्ति प्रकार परिवर्तित नहीं कर सकता है" त्रुटि फेंकता है। यदि यह विधि वापस आती है IEnumerable<Object>
, तो कोड बनाता है, लेकिन आउटपुट में गलत प्रकार वापस आ जाता है।
वहाँ yield return
भी पुनरावृत्ति का उपयोग कर whilst का उपयोग करने का एक तरीका है ?
if(c.Controls.Count > 0)
-> if(c.Controls.Any())
, खासकर यदि आप के रूप में अच्छी तरह से उपज रहे हैं :)
yield
। कृपया नीचे देखें :) और यह वन-लाइनर भी है :)
yield return
पुनरावर्ती कार्यों से बचने के लिए सावधान रहना चाहिए , मेमोरी उपयोग विस्फोटक रूप से होता है। देखें stackoverflow.com/a/30300257/284795