Отражение и общий тип, приводящий к нулю - PullRequest
1 голос
/ 29 мая 2009

Мне нужно получить объект типа для IProcessor через отражение, и в соответствии с документацией мне нужно сделать следующее:

Type.GetType("IProcessor`1[System.Int32]")

Однако, это возвращает нуль. Я тогда попробовал:

Type.GetType(typeof(IProcessor<int>).FullName)

и все еще получил ноль.

Однако я могу получить аргумент типа с помощью:

Type.GetType(typeof(IProcessor<int>).AssemblyQualifiedName)

Но, к сожалению, у меня нет версии, культуры или публичного ключа, доступных на сайте вызовов. Любые предложения о том, как получить объект типа?

РЕДАКТИРОВАТЬ: исправлены нижеупомянутые опечатки РЕДАКТИРОВАТЬ: использование оператора typeof в коде не вариант. Мне нужно получить тип объекта времени выполнения из строки

Ответы [ 2 ]

5 голосов
/ 29 мая 2009

Вы должны быть немного более осторожны со своей транскрипцией кода, о котором вы спрашиваете, так как примеры в вашем вопросе имеют синтаксические ошибки в них; «FullName» и «AssemblyQualifiedName» должны находиться за скобками, а не непосредственно над типом.

Таким образом, я предполагаю, что вы имели в виду:

Type.GetType("IProcessor`1[System.Int32]");

(обратите внимание на обратную черту между IProcessor и 1, что очень важно)

Как минимум, чтобы этот синтаксис работал, вы должны включить полное пространство имен, в котором находится тип, поэтому, если, например, IProcessor находится в пространстве имен MyApp.Interfaces, то код должен выглядеть так:

Type.GetType("MyApp.Interfaces.IProcessor`1[System.Int32]");

Обратите внимание, что это работает, только если тип, на который вы ссылаетесь, находится внутри той же сборки, из которой вы делаете этот вызов. Если это не так, то по крайней мере вы должны будете добавить имена сборок к вызову, как таковые (при условии, что это в сборке с именем MyAssembly):

Type.GetType("MyApp.Interfaces.IProcessor`1[System.Int32], MyAssembly");
1 голос
/ 29 мая 2009

Оператор typeof ожидает имя типа и возвращает объект Type напрямую. Так что, если вы можете ссылаться на тип в коде, чтобы получить тип, вам нужно использовать только

typeof(IProcessor<int>)

или, для открытой универсальной версии, вы затем создаете закрытый тип, используя отражение

typeof(IProcessor<>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...