Почему я не могу использовать переменную для typeof в Quartz.NET?

Я пытаюсь создать работу в форме ASP.NET (C#) с помощью Quartz.NET, и вот что у меня есть до сих пор:

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

Проблема в том, что я не хочу напрямую ссылаться на класс HTTPtoFTP, потому что в зависимости от того, что пользователь выберет в форме, он будет ссылаться на отдельный класс. Я попытался использовать переменную вместо HTTPtoFTP, но я получаю ошибку:

Тип или пространство имен 'mergedJobType' не может быть найдено (вам не хватает директивы using или ссылки на сборку?)

Почему это? Я думаю, что один из способов сделать это - оператор IF, где я просто копирую строку и меняю typeof для каждой возможности, но мне кажется, что мне придется повторить все остальные строки, которые также ссылаются на jobDetail.

5 ответов

Решение

Если я что-то упустил, я думаю, что вы ищете mergedJobType.GetType() Это возвращает объект типа класса объекта.

В.NET есть два наиболее распространенных способа получения типа.

Когда тип известен во время компиляции, используйте typeof,
Если тип известен только во время выполнения и у вас есть ссылка на объект этого типа, вызовите его GetType() чтобы получить объект типа.

Обратите внимание, что для универсальных типов есть разница между, скажем, typeof(List<int>) а также typeof(List<>) поэтому, если вы интенсивно используете рефлексию, вы можете узнать, как работать с общими типами времени выполнения.

Потому что это именно то, что typeof делает, он принимает метку для типа и возвращает соответствующий Type объект.

Что бы вы хотели mergedJobType.GetType(), GetType() возвращает тип экземпляра

Все комментарии пока верны. Я только что прошел через это сам. Следующая строка должна делать то, что вам нужно, если 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.

Вы можете получить тип переменной, используя mergedJobType.GetType(),

Другие вопросы по тегам