Ich habe eine sehr spezifische Situation. Ich muss einen Funktionsnamen vom Benutzer akzeptieren und diesen Funktionsnamen (wir wissen bereits, dass diese Funktion existiert) an eine andere Methode weitergeben, die Funktionsaufrufe behandelt. Diese Methode heißt RunMethod
und akzeptiert Func<string, string> method
.Übergabe der Funktionsname zu Func Delegat
Ich weiß, dass ich so etwas wie verwenden:
string methodName = "methodName";
MethodInfo mi = this.GetType().GetMethod(methodName);
mi.Invoke(this, null);
Aber in diesem Fall würde ich die RunMethod
Methode ändern muß, und es ist keine Option aufgrund bestehenden Code verwendet es.
Also, wie gebe ich eine Zeichenfolge als Methodenname an eine andere Methode, die Func<string, string>
akzeptiert?
Eine vereinfachte Implementierung:
static void Main(string[] args)
{
var pr = new Program();
Console.WriteLine("Enter a method name: ");
// user enters a method name
string input = Console.ReadLine();
// Can accept Method1 or Method2 as parameter
// But we need to pass the "input"
RunMethod(Method1);
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
static void RunMethod(Func<string, string> method)
{
Console.WriteLine(method("John Doe"));
}
static string Method1(string name)
{
return "method 1 called : " + name;
}
static string Method2(string name)
{
return "method 2 called : " + name;
}
@ user3185569: Warum sollte es einen 'ArgumentException' werfen? –
'method' ist null! – VSG24
In meinem Fall wäre es 'pr.GetType(). GetMethod (input);' und es ist null. – VSG24