使用通用方法优化c#代码

时间:2013-11-29 23:18:37

标签: c# quartz-scheduler

而不是一次又一次地写这个行列表

ScheduleJob<BillingJob>(sched, BillingJob.IntervalInMinutes, 1);
ScheduleJob<MaintenanceUrlTriggerJob>(sched, MaintenanceUrlTriggerJob.IntervalInMinutes, 2);

我想要一些如何创建作业列表然后只运行循环....任何想法我怎么能在下面执行此操作是伪代码在这里有语法错误ScheduleJob<obj.GetType()>

var list = new List<Type>();
list.Add(typeof(BillingJob));
list.Add(typeof(MaintenanceUrlTriggerJob));

var jobId = 0;
foreach (var obj in list)
{
    jobId++;

    ScheduleJob<obj.GetType()>(sched, BillingJob.IntervalInMinutes, jobId);
}

1 个答案:

答案 0 :(得分:0)

您可以这样做,但您需要使用反射来动态创建泛型类型参数。

Psuedo代码调整代码以演示技术:

var list = new List<Type>();
list.Add(typeof(BillingJob));
list.Add(typeof(MaintenanceUrlTriggerJob));

var jobId = 0;
foreach (var jobType in list)
{
    jobId++;

    var method = typeof(QuartzSchedulerClass).GetMethod("ScheduleJob");
    var generic = method.MakeGenericMethod(jobType);
    generic.Invoke(this, (Other Params));
}

Quartz的创建者可能知道这个泛型方法的用例很痛苦,并且可能有一个带有类型参数的重载:

ScheduleJob(typeof(Job), etc);

通常,为方便起见,泛型方法只是围绕它的薄包装。