Dave Kreskowiak
Так как вы загружаете .DLL во время выполнения вместо установки ссылки на нее вы теряете всю безопасность типов, включая возможность использования new ObservableCollection<MyType>()
в вашем коде. Дженерики, подобные этому, - это концепция времени компиляции, а не времени выполнения.
Универсальный тип, например List<string>
, это немного синтаксического сахара, короткий путь, если хотите. Для того чтобы этот код компилировался, вы должны иметь тип, доступный во время компиляции, чтобы компилятор мог генерировать правильный код в исполняемом файле.
Поскольку вы не собираетесь иметь тип, доступный во время компиляции (без ссылки), вы должны создать код для создания экземпляра коллекции самостоятельно. Имейте в виду, что вы все равно не получите никакой безопасности типов с этим и никакой помощи от Intellisense при написании вашего кода. Список, который вы получите обратно, будет List<object>
, а не список указанного типа.
public static object CreateListOfType(this Type type)
{
var listType = typeof(List<>);
var listOfType = listType.MakeGenericType(type);
var instance = Activator.CreateInstance(listOfType);
return instance;
}