Как перечислить типы в сборке или пространстве имен, которые были созданы во время выполнения с помощью MakeGenericType? - PullRequest
0 голосов
/ 17 декабря 2018

Рассмотрим следующие два типа:

public abstract class Abase {
}

public class MyGeneric<T> : Abase {
}

Если я создаю тип во время выполнения с помощью MakeGenericType:
Как я могу запросить сборку или пространство имен позже для этого типа?

var paramType = typeof (string);
var myMiscType = typeof (MyGeneric<>).MakeGenericType(paramType);

var assembly = myMiscType.Assembly;
//my type is not in here:
var allTypesfromMyTypeAssembly = (
        from t in assembly.GetTypes()where typeof (Abase).IsAssignableFrom(t)select t);

.Net Fiddle

Я попробовал несколько вещей, но, похоже, ничего не работает.Возможно ли то, что я хочу?

1 Ответ

0 голосов
/ 17 декабря 2018

Хотя сборка для открытого универсального типа и созданного вами закрытого универсального типа - это одна и та же сборка, закрытый тип отсутствует в списке, возвращаемом из Assembly.GetTypes(), поскольку этот список представляет то, что было известно во время компиляции.

Лучшее, что вы можете сделать, - это сохранить типы, которые вы создаете, в другом списке и объединить его с Assembly.GetTypes()

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