Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要创建表达式<;行动>;从字符串_C#_Linq_Hangfire - Fatal编程技术网

C# 需要创建表达式<;行动>;从字符串

C# 需要创建表达式<;行动>;从字符串,c#,linq,hangfire,C#,Linq,Hangfire,Hangfire是一个后台类方法运行程序,它是一个循环作业函数 RecurringJob.AddOrUpdate(表达式,字符串)是用于将方法添加到队列的方法。第一个参数是操作调用,第二个参数是cron格式的字符串 若我有类和函数名的字符串,我怎么能添加作业呢 正常的非字符串调用示例如下: RecurringJob.AddOrUpdate(() => new MyClass().MyMethod(), "0 0 * * *"); 我想做点像 string myClassString =

Hangfire是一个后台类方法运行程序,它是一个循环作业函数 RecurringJob.AddOrUpdate(表达式<操作>,字符串)是用于将方法添加到队列的方法。第一个参数是操作调用,第二个参数是cron格式的字符串

若我有类和函数名的字符串,我怎么能添加作业呢

正常的非字符串调用示例如下:

RecurringJob.AddOrUpdate(() => new MyClass().MyMethod(), "0 0 * * *");
我想做点像

string myClassString = GetMyClassFromConfig();//value "MyNamespace.MyClass";
string myMethodString = GetMyMethodFromConfig();//value "MyMethod";
string myCronString = GetMyCronFromConfig();// value "0 0 * * *"
Type myType = Type.GetType(myClassString);
var myMethod = myType.GetMethod(myMethodString);
var myInstance = Expression.Parameter(myType,"instanceName");
RecurringJob.AddOrUpdate(Expression.Call(myInstance,myMethod), myCronString);
但这会在AddOrUpdate方法调用上引发错误:

无法创建类型为的实例 System.Linq.Expressions.Expression。类型是接口或抽象 类,并且无法实例化。路径“类型”,第1行,位置8


如何通过字符串定义添加作业,或者如何从允许对象实例化和方法运行(new MyClass().Run())的字符串中生成表达式,如上面的示例所示?

下面将执行此作业

// ... (same as yours except the last 2 lines)
var myAction = Expression.Lambda<Action>(Expression.Call(Expression.New(myType), myMethod));
RecurringJob.AddOrUpdate(myAction, myCronString);
/。。。(除最后两行外,与您的相同)
var myAction=Expression.Lambda(Expression.Call(Expression.New(myType),myMethod));
RecurringJob.AddOrUpdate(myAction,myCronString);

字符串可能重复到其等价的表达式树问题/答案无法帮助我从字符串返回表达式或表达式,其中操作或函数可以是包含的,也可以是对象实例化(new MyClass())这是hangfire addorupdate方法所必需的。尝试解析并运行
操作
就像运行动态代码,这在c#@DLeh中可能是不可能的。您误解了该问题的答案。这是可能的,只是没有内置的,需要做一些额外的工作。对于一些简单的函数,我们可以直接使用。谢谢,我缺少了表达式。new,并通过Lambda调用使其成为表达式。