2010-12-07 16 views
26

में एक लैम्ब्डा अभिव्यक्ति संग्रहीत करना मुझे लगता है कि मेरा दिमाग तले हुए है क्योंकि मैं कुछ सरल करने के लिए संघर्ष कर रहा हूं। मेरे आवेदन में मेरे पास निबर्ननेट को कॉन्फ़िगर करने के लिए निम्न कोड है (मेरी समस्या निबर्ननेट के लिए विशिष्ट नहीं है)।एक परिवर्तनीय

return Fluently.Configure() 
    .ExposeConfiguration(c => { 
     c.EventListeners.PostInsertEventListeners = new IPostInsertEventListener[] { new LoggingEventListener() }; 
     c.EventListeners.PostUpdateEventListeners = new IPostUpdateEventListener[] { new LoggingEventListener() }; 
    }); 

हालांकि मुझे एक निजी चर के अंदर कॉन्फ़िगरेशन (एक्सपोज़ कॉन्फ़िगरेशन के अंदर सामान) को स्टोर करने की आवश्यकता है। मैं निम्नलिखित कर सकता हूं:

return Fluently.Configure() 
    .ExposeConfiguration(c => _configuration = c); 

जहां _configuration एक निजी चर है। लेकिन यह मेरे अतिरिक्त विन्यास विकल्प (EventListeners सामान) नहीं जोड़ता है। मैंने विभिन्न चीजों के साथ खेला है लेकिन मुझे लगता है कि मेरा लैम्ब्डा ज्ञान उतना अच्छा नहीं है जितना मैंने सोचा था।

मैं आपकी मदद की सराहना करता हूं। धन्यवाद

+0

मैं तुम्हें भी ExposeConfiguration की घोषणा (प्रतिनिधि) पोस्ट करना चाहिए लगता है , + यह है कि आप _configuration में सहेजना चाहते हैं (घोषणा भी मदद करेगा)। –

उत्तर

44

एक लैम्ब्डा अभिव्यक्ति केवल एक प्रतिनिधि है जो अक्सर Func<T1, T2, ..., TResult> प्रकारों में से एक के लिए मानचित्र करता है।

Func<T1, TResult> myVar = c => _configuration = c; 

TResult और T1 प्रासंगिक प्रकार के साथ की जगह।

यह आपके लिए काम कर सकता है।

+1

+1, लेकिन एक लैम्ब्डा अभिव्यक्ति नोट करें किसी भी संगत प्रतिनिधि प्रकार के लिए मानचित्र कर सकते हैं। इसका उपयोग अक्सर 'Func <> ' – JaredPar

+0

के साथ किया जाता है, इसे थोड़ा सा स्पष्ट बनाने के लिए मेरा उत्तर संपादित किया जाता है। :) –

+0

बढ़िया यही वह है जिसे मैं ढूंढ रहा था। धन्यवाद – nfplee

0

निश्चित रूप से। मान लें कि _configuration आपके द्वारा कोड के पहले बिट में उपयोग किए जा रहे स्टोर को स्टोर करने जा रहा है। यह कुछ इस तरह दिखना चाहिए:

return Fluently.Configure().ExposeConfiguration(c => { 
c.EventListeners.PostInsertEventListeners = _configuration; 
c.EventListeners.PostUpdateEventListeners = _configuration;}); 

संकलक से डाली त्रुटियों के किसी भी प्रकार देखते हैं, तो आप हमेशा उपयोग कर सकते हैं:

_configuration.Cast<IPostInsertEventListeners>();