文字列からクラスの新しいインスタンスを作成する C# メソッドがありますが、コードを実行するとエラーが発生します。
obj = (ClassX)Activator.CreateInstance(Type.GetType("classPrefix_" + className));
ArgumentNullException が処理されませんでした
値を null にすることはできません
パラメータ名:タイプ
このエラーに関するヘルプをいただければ幸いです。
文字列からクラスの新しいインスタンスを作成する C# メソッドがありますが、コードを実行するとエラーが発生します。
obj = (ClassX)Activator.CreateInstance(Type.GetType("classPrefix_" + className));
ArgumentNullException が処理されませんでした
値を null にすることはできません
パラメータ名:タイプ
このエラーに関するヘルプをいただければ幸いです。
Type.GetType への引数としてアセンブリ修飾名を使用する必要がある場合があります。
eg AssemblyName.Namespace.ClassName
クラス名から名前空間が欠落している可能性があります
私のために働く:
class ClassX {}
class classPrefix_x : ClassX {}
public class Program
{
public static void Main()
{
string className = "x";
ClassX obj = (ClassX)Activator.CreateInstance(Type.GetType("classPrefix_" + className));
Console.WriteLine(obj);
}
}
結果:
classPrefix_x
探しているクラスが定義されていてはなりません。正しく入力しましたか?
Type.GetType("classPrefix_" + className)
呼び出しが を返しているようnull
です。これがメソッドArgumentNullException
に渡されたときの原因です。CreateInstance
評価"classPrefix_" + className
して、それが評価するものと呼ばれる型があることを確認してください。
Type.GetTypeメソッドを使用する場合は、 AssemblyQualifiedNameも指定する必要があります(つまり、アセンブリ名と名前空間を含む完全修飾型名)。
おそらく、「classPrefix_」のタイプに加えて、className にあるものはありません。Type.GetType() 呼び出しは null を返し、CreateInstance は ArgumentNullException をスローします。
これは、Type.GetType(classHere)
が何も見つからなかったためです。探しているクラス名が存在することは確かですか? 可能であれば名前空間のプレフィックスを付ける必要があり、アプリ ドメインに既に読み込まれていない限り、外部アセンブリには見つからないことに注意してください。
Type.GetType("classPrefix_" + className)
nullを返しているようです。
型が見つからない場合、これは null を返します。考えられる原因として、名前空間が見つからないか、クラスが含まれるアセンブリがまだ読み込まれていないことが考えられます。
メソッドに関するApiドキュメントは、さらにインサイトを提供する可能性があります。 http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx