タイプのリストを循環し、それぞれのインスタンスを作成する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 reference not set to an instance of an object.
これを2行に分割して、最初にオブジェクトを作成してからリストに追加すると、最初の行は問題ありません(オブジェクトは正常に作成されます)が、同じエラーメッセージが表示されます。
編集:コードサンプルを更新
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;