2010-09-30 94 views
1

我试图创建一个使用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的行。

+1

我认为你必须提供更多的代码,考虑到错误提到的标识符不是在您发布的内容中看到 – 2010-09-30 10:20:16

+0

您是否已经解决了这个问题? – 2012-04-06 06:17:25

回答

3

除非我错过了一些东西,我认为你正在寻找的是mergedJobType.GetType()这将返回对象类的类型对象。

+0

感谢所有人,现在我得到'Job类必须实现Job界面。':(类型mergedJobType2 = mergedJobType.GetType(); JobDetail jobDetail = new JobDetail +“_job”,schedID,mergedJobType2); – Chris 2010-09-30 10:33:47

0

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

1

因为这正是typeof所做的,所以它需要一个类型的标签并返回相关的Type对象。

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

3

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

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

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

0

到目前为止,所有人的评论都是正确的。我只是经历了这个。下面的行应该做你需要什么,只要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接口

相关问题