我有一个提供字符串列表的情况。列表中的第一个条目是方法的名称。列表中剩余的字符串是方法参数。我想使用一个任务来运行该方法(用于教育目的)。我在找出允许我将方法名称输入任务指令的正确过程时遇到问题。
对于这个例子,我有两个可以作为任务运行的静态方法。args[1] 表示我的选择。
public class Program
{
private static ILog log = LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
static void Main(string[] args)
{
string whichPrint = args[1];
Type type = typeof(Program);
MethodInfo meth = type.GetMethod(whichPrint, BindingFlags.Public |
BindingFlags.Static);
//this is the problem area....how do I feed the the method or delegate into
//the lambda expression ????
Delegate methDel = meth.CreateDelegate(type);
Task t = Task.Factory.StartNew(() => methDel("help!!"));
}
static void printme1(string s)
{
log.Debug("Printme1 Printing: " + s);
}
static void printme2(string s)
{
log.Debug("Printme2 Printing: " + s);
}
}
我无法编译,因为 methDel 被视为变量。我需要将它或其他东西视为一种方法。我不想使用 case/switch 语句,因为我可能有很多可以分配给任务的方法。