4

文字列からクラスの新しいインスタンスを作成する C# メソッドがありますが、コードを実行するとエラーが発生します。

obj = (ClassX)Activator.CreateInstance(Type.GetType("classPrefix_" + className));

ArgumentNullException が処理されませんでした

値を null にすることはできません

パラメータ名:タイプ

このエラーに関するヘルプをいただければ幸いです。

4

7 に答える 7

5

Type.GetType への引数としてアセンブリ修飾名を使用する必要がある場合があります。

eg AssemblyName.Namespace.ClassName

アセンブリ修飾名に関する MSDN Doc

于 2010-02-19T23:57:11.040 に答える
3

クラス名から名前空間が欠落している可能性があります

于 2010-02-19T23:56:01.217 に答える
1

私のために働く:

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

探しているクラスが定義されていてはなりません。正しく入力しましたか?

于 2010-02-19T23:56:24.913 に答える
0

Type.GetType("classPrefix_" + className)呼び出しが を返しているようnullです。これがメソッドArgumentNullExceptionに渡されたときの原因です。CreateInstance

評価"classPrefix_" + classNameして、それが評価するものと呼ばれる型があることを確認してください。

Type.GetTypeメソッドを使用する場合は、 AssemblyQualifiedNameも指定する必要があります(つまり、アセンブリ名と名前空間を含む完全修飾型名)。

于 2010-02-19T23:55:41.263 に答える
0

おそらく、「classPrefix_」のタイプに加えて、className にあるものはありません。Type.GetType() 呼び出しは null を返し、CreateInstance は ArgumentNullException をスローします。

于 2010-02-19T23:56:02.873 に答える
0

これは、Type.GetType(classHere)が何も見つからなかったためです。探しているクラス名が存在することは確かですか? 可能であれば名前空間のプレフィックスを付ける必要があり、アプリ ドメインに既に読み込まれていない限り、外部アセンブリには見つからないことに注意してください。

于 2010-02-19T23:56:19.610 に答える
0

Type.GetType("classPrefix_" + className)nullを返しているようです。

型が見つからない場合、これは null を返します。考えられる原因として、名前空間が見つからないか、クラスが含まれるアセンブリがまだ読み込まれていないことが考えられます。

メソッドに関するApiドキュメントは、さらにインサイトを提供する可能性があります。 http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx

于 2010-02-19T23:58:15.893 に答える