Ich versuche, ein Ereignis/Messaging-System zu erstellen, wo die Abonnenten allgemeine Ereignistypen oder bestimmte Ereignistypen abonnieren können.Wie bekomme ich eine Liste von Wörterbuch-Schlüsselabfragen, wo Werte Listen sind?
Ich habe ein Wörterbuch von Ereignistypen, die Listen von Abonnenten dieser Typen enthalten, und, um die Ereignisse an die Abonnenten zu melden, möchte ich eine Liste aller Abonnements in diesen Listen, wo das Abonnement von einem Typ ist das ist gleich oder kann vom Typ des Ereignisses zugewiesen werden; mit anderen Worten, wenn der Wörterbuchschlüssel dies als Kriterium erfüllt.
Wie bekomme ich eine abgeflachte Liste der Elemente von Listen, die von den Schlüsseln eines Wörterbuchs abgefragt werden (mit linq)?
Mein WIP-Code:
private Dictionary<Type, List<SomeEventDelegate>> subscriptions;
// ...other code...
public void Dispatch(SomeEvent someEvent)
{
// This should get the Key-Value pairs... How do I get a flattened list of all items in the values (which are lists themselves)?
List<SomeEventDelegate> subscribers =
from subscription in subscriptions
where subscription.Key.IsAssignableFrom(someEvent.GetType())
select subscription;
//After I have the flattened list, I will dispatch the event to each subscriber here, in a foreach loop.
}
Auf einer Seite zur Kenntnis, ich glaube nicht, dass Sie sollte das überhaupt tun. Sie müssen die Abonnenten nicht so verwalten, das ist in Delegierten und Ereignissen eingebaut. Wenn Sie mehr Kontrolle benötigen, gibt es dafür Rahmen, die es richtig machen. –
@JeffMercado Für meine spezifischen Bedürfnisse müssen die Abonnenten unabhängig von den Ereignisquellenobjekten sein und müssen nur über die Ereignistypen Bescheid wissen, um diese Ereignisse zu abonnieren. (Sie können je nach Ereignistyp einen Verweis auf das auslösende/Quellenobjekt erhalten, aber das ist nicht notwendig oder insgesamt garantiert) --- Ich bin jedoch neu bei C# -Ereignissen und mag kritische Informationen vermissen, die beeinflussen oder vollständig sein können ändere diese Anforderung oder meine Implementierung. Wenn Sie stark vermuten, dass dies der Fall ist, rufen Sie mich bitte im Chat an, um weiter zu diskutieren! Vielen Dank! – XenoRo