2010-10-26 17 views
27

मैं यहाँ क्या गलत कर रहा हूं? मैं अपनी कार्रवाई कैसे निष्पादित कर सकता हूं?रिकर्सिव कॉल - एक्शन लैम्ब्डा

var recurse = new Action<IItem, Int32>((item, depth) => 
{ 
    if (item.Items.Count() > 0) recurse(item, depth + 1); // red squiggly here 

    // ... 
}); 

मैं जब recurse कह "विधि, प्रतिनिधि या घटना की उम्मीद" बुला टेढ़ा-मेढ़ा एक लाल हो रही है।


अद्यतन

मैं होमैम का जवाब स्वीकार कर लिया है। मैं तो बस जोड़ने के लिए/एक ही के लिए एक और वाक्य रचना को साझा करना चाहते हैं ... लेकिन जो मैं आंखों पर थोड़ा आसान लगता है ...

Action<IEnumerable<Item>> Recurse = null; 

Recurse = item => 
{ 
    if (item.Items != null) Recurse(item.Items); 

    // ... 
}; 

उत्तर

48

बस प्रतिनिधि Action को परिभाषित करने और यह कॉल करने से पहले यह करने के लिए अशक्त आवंटित रिकर्सिवली।

Action<IItem, Int32> recurse = null; 

फिर

recurse = new Action<IItem, Int32>((item, depth) => 
{ 
    if (item.Items.Count() > 0) recurse(item, depth + 1); // red squiggly here 
    // ... 
}); 

गुड लक!

+0

मुझे परिभाषा और कार्यान्वयन को विभाजित करने से नफरत है। क्या मैं कोड की एक पंक्ति में ऐसा कर सकता हूं? – roosteronacid

+6

नहीं। एरिक बताते हैं कि क्यों उनके ब्लॉग एंट्री (प्रति सामान्य यह दिखाई देता है): http://blogs.msdn.com/b/ericlippert/archive/2006/08/18/706398.aspx –

+0

@Ron: नाइस टिडबिट। कुछ प्रकार की अजीब भावना बनाता है :) – roosteronacid

संबंधित मुद्दे