Динамический Typeof в C #

2

У меня возникли проблемы с написанием оператора typeof, в котором будет использоваться переменная из файла конфигурации, код которой похож на этот

Type t = new typeof ("My.other.class" + configValue[0]);

configValue является динамическим значением, которое я получаю из файла app.config.

Ошибка, которую я получаю, это "тип ожидается", это нормально, если я набираю класс напрямую, поэтому предполагаю, что мое форматирование неверно. Как это должно быть написано?

Теги:
typeof

3 ответа

18
Лучший ответ

Ключевое слово typeof используется для использования во время компиляции. Вместо этого используйте Type.GetType(string).

  • 8
    Это не будет работать, если тип не находится в текущей сборке или mscorlib. В противном случае вам нужно указать полное имя сборки, а не просто пространство имен + тип.
4

Это то, что вы ищете?

Type t = Type.GetType("spork");
object myspork = Activator.CreateInstance(t);
2

Чтобы сделать это, используя только пространство имен и имя класса (например, в вопросе), вам также нужно знать, какая сборка содержит класс.

Если текущая сборка (или mscorlib) содержит тип, вы можете использовать Type.GetType(string) для получения типа,

Если тип содержится в другой сборке (то есть: в библиотеке), тогда вам нужно будет использовать Assembly.GetType, Это требует наличия экземпляра Assembly, однако, который может быть извлечен через Assembly.Load или с использованием другого типа в сборке.

  • 2
    Вы все еще можете использовать Type.GetType. Вам просто нужно полное имя типа, соответствующее сборке. Документы по API, на которые я ссылаюсь, объясняют это.
  • 0
    Да, мой комментарий тоже это уточнил. Вы просто не можете загрузить его с синтаксисом в вопросе (namespace + type), без использования сборки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню