1

我正在尝试使用 Quartz.NET 以 ASP.NET (C#) 形式创建工作,这就是我目前所拥有的:

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

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

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

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

4

5 回答 5

3

除非我遗漏了什么,否则我认为您正在寻找的是mergedJobType.GetType()返回对象类的类型对象。

于 2010-09-30T10:20:09.990 回答
3

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

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

typeof(List<int>)请注意,对于泛型类型,例如,和之间存在差异,typeof(List<>)因此如果您使用大量反射,您可能想学习如何处理泛型运行时类型。

于 2010-09-30T10:26:47.637 回答
1

因为这正是typeof它所做的,它接受类型的标签并返回相关的Type对象。

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

于 2010-09-30T10:21:11.330 回答
0

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

于 2010-09-30T10:21:01.783 回答
0

到目前为止,每个人的评论都是正确的。我自己刚刚经历了这个。只要 mergeJobType 是实现 IJob 的类的实例,以下行就可以满足您的需求:

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

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

于 2010-10-20T23:58:04.727 回答