2

汎用メソッドがあり、文字列変数から取得した型をそれに送信したいと考えています。

私のジェネリック メソッドのシグネチャは次のとおりです。

public ICollection<TEntity> agregarItems<TEntity>(ComboBox cb) where TEntity : new()

そして、私はこれをしたい:

Type tipo = Type.GetType("MyNamespace." + cb.Name);

cliente.GetType().GetProperty(cb.Name).SetValue(cliente,
        agregarItems<tipo>(cb), null);

cb は ComboBox オブジェクトで、cliente はクラスのインスタンスです。

cb.Name は "Phone" の可能性があり、Phone クラスは MyNamespace に既に存在します。

Tipo が正式に定義されていないため、次のエラーが発生します。

型または名前空間名 'tipo' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?)

正式に定義されていない型をジェネリック メソッドに送信できる回避策が必要です。

4

2 に答える 2

0

あなたがしなければならないことは、ここに提示された方法で(Activator)で取得したタイプでインスタンスを作成することです:

リフレクションを使用してジェネリックC#オブジェクトを動的に作成するにはどうすればよいですか?

于 2013-02-06T07:45:13.753 に答える
0
Type tipo = Type.GetType("TypeName");

非常に基本的なタイプでのみ機能します。

参照したい型は、System.Web、System などのアセンブリに含まれている可能性があります。このアセンブリが参照されているだけでは十分ではありません。型がどのアセンブリに含まれているかをランタイムに伝える必要もあります。

だから試してみてください

Type tipo = Type.GetType(YourType.AssemblyQualifiedName);

それ以外の

Type tipo = Type.GetType(YourType.FullName);

さらに、実行時に決定される型 (tipo) を使用して、コンパイル時に決定されるジェネリック オーバーロードを作成しています。それはうまくいきません - 今まで。

型を引数として渡すには、ジェネリック メソッドを変更する必要があります。

于 2013-02-06T07:41:50.630 に答える