Получить неявно экземпляры родовых типов из сборки? - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь использовать отражение C # для извлечения всех типов из сборки (скажем, из «ExecutingAssembly»), я могу получить все явно определенные типы, включая определяемые мной универсальные типыв сборе. Но я не могу извлечь неявно экземпляров универсальных типов (конкретная версия).

Например, var types = Assembly.GetExecutingAssembly().GetTypes(); это будет извлекать все явно определенные типы (классы, структуры, которые определены в этой сборке, включая общие, такие как class MyGenericClass<T>).

Однако в той же сборке я фактически использую MyGenericClass<int> в качестве конкретный введите мой код для создания экземпляров объектов (таких как: MyGenericClass<int> myObject;), но этот тип конкретный MyGenericClass<int>, кажется, не может быть полученприведенный выше код.

Мне интересно, могут ли какие-либо экземпляры сгенерированных экземпляров быть фактически извлеченными из сборки, поэтому я могу использовать этот тип для выполнения некоторых работ по генерации кода позже.

Если они не могут быть извлечены, есть предложения по дизайну?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Это не то, что вам нужно, но вы можете пойти на уровень глубже и получить все методы всех типов и собрать все возвращаемые типы и типы всех аргументов.

Просто чтобы прояснить, это не что иное, как анализ кода, который требуется для вашей задачи. Это просто дает вам немного больше информации.

0 голосов
/ 05 ноября 2019

Отражение основано на метаданных сборки . То, что вам, похоже, нужно, потребует некоторого рода проверки исходного кода , чтобы выяснить все конкретные универсальные типы, созданные во время выполнения. Возможно? Да, компилятор делает это, но не с отражением.

...