2011-03-11 12 views
5

मैं जानता हूँ कि बहुत से लोगों कोसदस्यता समाप्त लैम्ब्डा इवेंट हैंडलर ** बंद के साथ **

myButton.Click += (s, e) => MessageBox.Show("Hello World!"); 

EventHandler HelloWorld = delegate { MessageBox.Show("Hello World!"); }; 
myButton.Click -= HelloWorld; 
myButton.Click += HelloWorld; 
का स्पष्ट जवाब के साथ

"कैसे मैं निम्नलिखित सदस्यता समाप्त करें" का सवाल पूछा है

लेकिन क्या मैं बंद करने के लिए लैम्ब्डा का उपयोग कर रहा हूं? मेरी वस्तु AssessmentRationChanged प्रकार Action की है कि कहा जाता है एक घटना है, और मैं इसे thusly तारों कर रहा हूँ क्या होगा यदि: इस बात की संभावना मैं पहले से ही कुछ के लिए यह हैंडलर निर्धारित किया है है

foreach (MassFMVUpdateDTO dto in CurrentProperties) 
    dto.AssessmentRationChanged +=() => setCellColorBasedOnAssessmentRatioValue(dto); 

क्या होगा अगर/वस्तुओं के सभी में यह पाश? क्या उन्हें सदस्यता समाप्त करने का कोई तरीका है?

मुझे यकीन है कि मैं प्रतिबिंब का उपयोग कर सकता हूं और हैंडलर को पूरी तरह साफ़ कर सकता हूं, लेकिन क्या कोई क्लीनर तरीका है?

उत्तर

5

नहीं, आपको मूल रूप से प्रतिनिधियों के संदर्भों को संग्रहित करना होगा।

वह सब कुछ याद रखें जिसे आप बाद में सदस्यता समाप्त करना चाहते हैं।

+0

Grrrr। तो शायद मेरे डिजाइन को फिर से काम करें और घटना में एक प्रेषक पास करें? - 'एक्शन '- हमेशा जॉन के रूप में धन्यवाद। –

+1

जॉन कौन है? :) – jgauffin

+0

@Adam: आपने शेष संदर्भ को हमारे लिए यह स्पष्ट करने के लिए पर्याप्त नहीं बनाया है कि आप डिज़ाइन को बदलना चाहते हैं या नहीं। मुझे यकीन नहीं है कि प्रेषक को कैसे गुजरना होगा ... –

1

जब से तुम यह लिखा:

मैं मैं प्रतिबिंब का उपयोग करें और हैंडलर स्पष्ट कर सकता है पूरी तरह से

स्पष्ट जवाब होगा एक घटना के बजाय एक साधारण प्रतिनिधि उपयोग करने के लिए यकीन है कि:

foreach (MassFMVUpdateDTO dto in CurrentProperties) 
    dto.AssessmentRationChanged =() => setCellColorBasedOnAssessmentRatioValue(dto); 
4

आप एक प्रतिनिधि उदाहरण है कि आप बाद में उपयोग कर सकते हैं बनाने के लिए उपयोग कर सकते हैं लैम्ब्डा सदस्यता समाप्त करने के:

Action a =() => setCellColorBasedOnAssessmentRatioValue(dto); 

myObject.MyEvent += a; 

// to unsubscribe: 
myObject.MyEvent -= a; 
+0

यह एक तेज विचार है, समस्या यह है कि यह एक लूप में है, और ऐसे कई डीटीओ हैं, इसलिए मुझे यह ट्रैक रखना होगा कि कौन सी एक्शन जाता है जिसके साथ डीटीओ, जो काम करने योग्य है, दर्द का थोड़ा सा है । –

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