为什么我不能在Quartz.NET中为'typeof'使用变量?
我试图创建一个使用Quartz.NET在ASP.NET(C#)形式的工作,这是我到目前为止有:为什么我不能在Quartz.NET中为'typeof'使用变量?
JobDetail jobDetail = new JobDetail(count + "_job", schedID, typeof(HTTPtoFTP));
问题是,我不希望链接直接到HTTPtoFTP类,因为取决于用户在表单上选择什么,它将链接到一个单独的类。我试过使用一个变量代替HTTPtoFTP,但是我得到这个错误:
The type or namespace 'mergedJobType' could not be found (are you missing a using directive or an assembly reference?)
这是为什么?我想一种方法是使用IF语句,我只复制行并为每种可能性更改typeof,但似乎我不得不复制所有其他涉及jobDetail的行。
除非我错过了一些东西,我认为你正在寻找的是mergedJobType.GetType()
这将返回对象类的类型对象。
感谢所有人,现在我得到'Job类必须实现Job界面。':(类型mergedJobType2 = mergedJobType.GetType(); JobDetail jobDetail = new JobDetail +“_job”,schedID,mergedJobType2); – Chris 2010-09-30 10:33:47
您可以使用mergedJobType.GetType()
来获取变量的类型。
因为这正是typeof
所做的,所以它需要一个类型的标签并返回相关的Type
对象。
你会想要的是mergedJobType.GetType()
。 GetType()
返回实例的类型。
在.NET中,有两种最常见的检索类型的方法。
当在编译时处已知类型时,请使用typeof
。
只有在运行时才知道类型,并且您有该类型对象的引用,请调用其GetType()
以获取Type对象。
请注意,对于通用类型,例如typeof(List<int>)
和typeof(List<>)
之间存在差异,所以如果您使用了大量反射,则可能需要了解如何处理通用运行时类型。
到目前为止,所有人的评论都是正确的。我只是经历了这个。下面的行应该做你需要什么,只要mergedJobType是实现一个类的实例IJob:“
JobDetail jobDetail = new JobDetail(count + "_job", schedID, mergedJobType.GetType());
的错误你得到“工作类必须实现Job接口。 :(Type mergedJobType2 = mergedJobType.GetType(); JobDetail jobDetail = new JobDetail(count + "_job", schedID, mergedJobType2);
很可能是由于mergedJobType没有实现IJob接口所有的Quartz.Net作业必须实现IJob接口
我认为你必须提供更多的代码,考虑到错误提到的标识符不是在您发布的内容中看到 – 2010-09-30 10:20:16
您是否已经解决了这个问题? – 2012-04-06 06:17:25