Ich habe einen Eventhandler in C# Umsetzung einige Probleme wurden mit ich nicht in einer Liste Action<T>
zu Action<object>
für die Lagerung zu werfen scheinen kann.MyClass Casting <T> auf MyClass <object> C#
private readonly IList<Action<object>> listeners;
public EventHandler() {
listeners = new List<Action<object>>();
}
public void RegisterListener<T>(Action<T> listener) where T : class {
Listeners.Add((Action<object>)listener);
}
private void ReciveEvent(object evt) {
if (evt != null)
Listeners.Where(l => l.GetGeneric(0).
IsAssignableFrom(evt.GetType())).
AsParallel().ForAll(l => l(evt));
}
bekomme ich nur ein Guss Ausnahme:
Unable to cast object of type 'System.Action`1[Events.SendTestEvent]' to type 'System.Action`1[System.Object]'.
Events.SendTestEvent <- My current test object... it is just a class with a single property and no parent(besides obj)
Warum definieren nicht 'T' auf Klassenebene, so dass' listeners' kann als 'IList>' deklariert werden. dann musst du nicht casten. –
sstan
@ststan ah, weil ich zu einem Ereignis jeder Art gerne hätte, so IList> könnte sowohl eine Aktion und Aktion enthalten. Code, den ich dafür benutze. http://hastebin.com/betiquyavi.coffee –
Es könnte hilfreich sein, die Frage zu bearbeiten, um einzuschließen, wie Sie beabsichtigen, 'Listeners' zu verwenden. Es ist mir nicht sofort klar, wie nützlich es ist, eine Liste von "Action