2010-05-20 2 views
5

Hat jemand irgendwelche Nachteile? Es sollte beachtet werden, dass Sie keine anonymen Methoden aus einer Event-Delegate-Liste entfernen können, ich bin mir dessen bewusst (eigentlich war das die konzeptionelle Motivation dafür).C# Events und Lambdas, Alternative zum Null-Check?

Das Ziel hier ist eine Alternative zu:

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

Und der Code:

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

Nun verfügbar wurde, fragte man mich zu fragen, nicht zu, so dass ich gewohnt. –

+0

Keine größeren Nachteile in den Sinn kommen. Keine Vorteile kommen auch in den Sinn. – Jay

Antwort

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

Ich bin mir nicht sicher, was Sie sagen wollen. Vielleicht "delegiere (p, q) {};"? Der Delegat nimmt zwei Parameter. – Sprague

+0

Mit dieser Ereignisinitialisierung können Sie ein Ereignis auslösen, ohne nach Null zu suchen. Nein, delegiere nur {}. – Nagg

+0

ill vote diese antwort, wenn es funktioniert, testet es morgen früh. – Sprague

5

Eine Alternative ist stattdessen eine Erweiterungsmethode zu machen:

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)); 
    } 
} 

Jetzt ist es Jus t:

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

Die neuesten Versionen von Visual Studio automatisch vorschlagen ein null-conditional operator zu verwenden:

onFoo?.Invoke(this, null); 

(wann immer diese Art von Code angetroffen wird: if (onFoo != null) onFoo.Invoke(this, null)).

Dieser Operator mit der Veröffentlichung von C# 6.0 in 2015