У меня есть цикл foreach, который циклически перебирает список типов и создает экземпляр каждого из них. Однако при сборке выдает ошибку CS0246 («Не удалось найти тип или пространство имен ...»). Вот упрощенная версия кода:
internal static class TypeManager
{
internal static void LoadTypes()
{
// Fill the list with types
// Create instances of each type
foreach (Type currType in Types)
{
Type aType = currType; // comiles fine
Object newObj = (currType)Activator.CreateInstance<currType>; // CS 0246
}
}
public static List<Type> Types;
}
Редактировать: следующий вопрос
Мой цикл foreach теперь выглядит следующим образом:
foreach (Type currType in Types)
{
Types.Add((Type)Activator.CreateInstance(currType));
}
со списком типов теперь имеет тип Object
Это прекрасно компилируется, но когда я запускаю его, я получаю следующее:
Object reference not set to an instance of an object.
Если я разобью это на две строки, которые сначала создадут объект, затем добавят его в список, первая строка будет в порядке (объект успешно создан), но выдает мне то же сообщение об ошибке.
Редактировать: Обновить пример кода
internal static LoadPlugins()
{
foreach (Type currType in pluginAssembly.GetTypes())
{
if (typeof(IPlugin).IsAssignableFrom(currType))
{
Assembly.LoadFrom(currFile.FullName);
Object pluginInstance = Activator.CreateInstance(currType); // Compiles and runs fine
Plugins.Add((IPlugin)pluginInstance); // NullReferenceException
break;
}
}
}
public static List<IPlugin> Plugins;