2017-10-18 1 views
-2

Ich habe ein Wörterbuch mit string Schlüssel, z.B. 123456789. Jetzt möchte ich an einem anderen Punkt in meiner Anwendung, dass mein Wörterbuch diese Taste nach oben schaut und entweder die Methode selbst ausführt (hinter dem Schlüssel gespeichert) oder irgendwie die Funktion zurückgibt, damit ich manuell Parameter hinzufügen kann. Ist das überhaupt möglich?C# Wörterbuch speichern Aktion/Methode

+1

Ja. Warum wäre es nicht möglich? – CalC

+0

Ja, eigentlich ganz einfach. Sie können den Typ des Werts für einen beliebigen Delegaten festlegen (z. B. "Aktion", "Prädikat" usw.). –

+0

Warum wäre es nicht möglich, die Schwerkraft zu deaktivieren? @ Cal279 – John

Antwort

3

Klingt nach einer einfachen Aufgabe. (Schließt nicht Plausibilitätsprüfungen)

Dictionary<string,Action<object>> dict; 

public Action<object> GetFunction(string key) 
{ 
    return dict[key]; 
} 

public void CallFunction(string key, object parameter) 
{ 
    dict[key](parameter); 
} 
1

Sie benötigen einen dictionary<string, Action> zu erstellen, das für keine Parameter wäre.

z.B.

static class MyActions { 
    static Dictionary<string,Action> wibble = new Dictionary<string,Action>(); 
} 

Ich habe statische verwendet, ist es nicht notwendig, wenn Sie die Referenz um/Reference übergeben können.

dann Action ...

MyActions.wibble["123456789"] =() => { // do action }; 

oder eine Referenz kein Parameter Methode

MyActions.wibble["123456789"] =() => MyMethod; 

dann zu nennen;

MyActions.wibble["123456789"]() 

Unter der Annahme, der Schlüssel vorhanden ist, können Sie versuchen, oder sogar MyActions.wibble["123456789"]?.Invoke()

Wenn Sie Parameter benötigen, machen das Wörterbuch vom Typ Action<T> oder Action<T1, T2> usw. auf der Anzahl von Parametern abhängig.

zB wibble = new Dictionary<string,Action<int>>()

und dann wibble["123456789"] = x => {action with x}

und wibble["123456789"](42)