为什么我不能在Quartz.NET中为'typeof'使用变量?

时间:2010-09-30 10:16:15

标签: c# quartz.net

我正在尝试使用Quartz.NET在ASP.NET(C#)表单中创建一个作业,这是我到目前为止所拥有的:

JobDetail jobDetail = new JobDetail(count + "_job", schedID, typeof(HTTPtoFTP));

问题是,我不想将直接链接到HTTPtoFTP类,因为根据用户在表单上选择的内容,它将链接到单独的类。我尝试使用变量代替HTTPtoFTP,但我得到错误:

  

找不到类型或命名空间'mergedJobType'(您是否缺少using指令或程序集引用?)

这是为什么?我想这样做的一种方法是IF语句,我只是复制行并改变每种可能性的类型,但似乎我必须复制所有引用jobDetail的其他行。

5 个答案:

答案 0 :(得分:3)

除非我遗漏了什么,否则我认为你要找的是mergedJobType.GetType()它会返回一个对象类的类型对象。

答案 1 :(得分:3)

在.NET中,有两种最常用的方法来检索类型。

在编译时知道类型时,请使用typeof 当类型仅在运行时已知并且您具有对该类型的对象的引用时,请调用其GetType()以获取Type对象。

请注意,对于泛型类型,例如typeof(List<int>)typeof(List<>)之间存在差异,因此如果您正在使用大量反射,则可能需要了解如何处理通用运行时类型。 / p>

答案 2 :(得分:1)

因为这正是typeof的作用,它采用了类型的标签并返回相关的Type对象。

您想要的是mergedJobType.GetType()GetType()返回实例的类型。

答案 3 :(得分:0)

您可以使用mergedJobType.GetType()来获取变量的类型。

答案 4 :(得分:0)

到目前为止,每个人的评论都是正确的。我亲自经历过这个。只要mergedJobType是实现IJob的类的实例,以下行应该可以满足您的需求:

 JobDetail jobDetail = new JobDetail(count + "_job", schedID, mergedJobType.GetType());

您得到的错误“Job类必须实现Job接口。” :( Type mergedJobType2 = mergedJobType.GetType(); JobDetail jobDetail = new JobDetail(count + "_job", schedID, mergedJobType2);很可能是由于mergedJobType没有实现IJob接口。所有Quartz.Net作业都必须实现IJob接口。