2009-08-04 2 views
2

У меня возникают проблемы, написание TYPEOF заявления, которое будет использовать переменный из конфига файла код, как этоDynamic TYPEOF в C#

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

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

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

ответ

18

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

+8

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

2

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

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

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

+2

Вы все еще можете использовать Type.GetType. Вам просто нужно имя типа сборки. API-интерфейсы API, с которыми я связан, объясняют это. –

+0

Да. Мой комментарий также указал, что. Вы просто не можете загрузить его с синтаксисом в вопросе (namespace + type), не используя сборку. –

4

Вы хотите что-то ищите?

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