2010-05-20 12 views
5

क्या कोई भी कोई कमी देखता है? यह ध्यान दिया जाना चाहिए कि आप किसी ईवेंट प्रतिनिधि सूची से अज्ञात विधियों को नहीं हटा सकते हैं, मुझे इसके बारे में पता है (वास्तव में यह इसके लिए वैचारिक प्रेरणा थी)।सी # घटनाक्रम और Lambdas, शून्य जांच के विकल्प?

public delegate void FooDelegate(object sender, EventArgs e); 

public class EventTest 
{ 
    public EventTest() 
    { 
     onFoo += (p,q) => { }; 
    } 

    public FireFoo() 
    { 
     onFoo.Invoke(this, null); 
    } 

    public event FooDelegate onFoo; 

}

+0

में सी # 6.0 के रिलीज के ठीक साथ उपलब्ध हो गया है, आप मुझे पूछने के लिए नहीं पूछा, तो मैं अभ्यस्त। –

+0

कोई बड़ी कमी नहीं आती है। कोई भी फायदे दिमाग में नहीं आता है, या तो। – Jay

उत्तर

3
public event FooDelegate onFoo = delegate {}; 
+0

मुझे यकीन नहीं है कि आप क्या कहने की कोशिश कर रहे हैं। शायद "प्रतिनिधि (पी, क्यू) {};"? प्रतिनिधि दो पैरामीटर लेता है। इस घटना प्रारंभ के साथ – Sprague

+0

आप बिना शून्य के चेक के ईवेंट को आग लगा सकते हैं। नहीं, बस प्रतिनिधि {}। – Nagg

+0

बीमार अगर यह काम करता है तो इस जवाब को वोट दें, कल सुबह इसका परीक्षण करें। – Sprague

5

एक वैकल्पिक बजाय एक एक्सटेंशन विधि बनाने के लिए है:

if (onFoo != null) onFoo.Invoke(this, null); 

और कोड:

public static class EventExtensions { 
    public static void Fire<T>(this EventHandler<EventArgs<T>> handler, object sender, T args) { 
     if (handler != null) 
      handler(sender, new EventArgs<T>(args)); 
    } 
} 

यहां लक्ष्य के लिए एक विकल्प है

अब यह जुस है टी:

TimeExpired.Fire(this, new EventArgs()); 
0

दृश्य स्टूडियो के नवीनतम संस्करण स्वचालित रूप से उपयोग करने के लिए सुझाव है कि एक null-conditional operator:

onFoo?.Invoke(this, null); 

(जब भी कोड इस तरह का सामना करना पड़ा है: if (onFoo != null) onFoo.Invoke(this, null))।

इस ऑपरेटर 2015

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