2

次のように、パラメーターで渡したタイプに従ってデータを取得するメソッドがあります。

    protected void FillList<TEntity>()
    {
        doWorkForTEntity();
    }

このメソッドを動的に呼び出す必要があります:

            Type[] entities = System.Reflection.Assembly.GetAssembly(typeof(User)).GetTypes();
            Type currentEntity = (from entity in entities
                                  where entity.Name.Equals(this.targetEntity)
                                  select entity).FirstOrDefault();
            FillList<currentEntity>();

このエラーが発生しました:

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

中間オブジェクト タイプを試しましたが、成功しませんでした

アイデアはありますか?

4

4 に答える 4

2

コンパイル時にエンティティ タイプに関する情報がないため、リフレクションによって適切なメソッドを構築して呼び出す必要があります。

Type[] entities = System.Reflection.Assembly.GetAssembly(typeof(User)).GetTypes();
Type currentEntity = (from entity in entities
                      where entity.Name.Equals(this.targetEntity)
                      select entity).FirstOrDefault();     
var method = this.GetType().GetMethod("FillList",  BindingFlags.Instance | BindingFlags.NonPublic)
                           .MakeGenericMethod(currentEntity);
method.Invoke(this, new object[0]);
于 2013-05-02T13:05:07.150 に答える
0

Type TEntity のインスタンスを取得するようにメソッドを変更します。

protected void FillList<TEntity>(TEntity instance)
{
    doWorkForTEntity();
}

Type 名から動的インスタンスを作成し、変更したメソッドを呼び出します。

dynamic instance = Activator.CreateInstance(this.targetEntity);
FillList(instance);

動的タイプは基本的に、他の回答で示されていることを実行していますが、私見では、このコードはその意図がより明確で明確です。

于 2013-05-02T14:36:05.170 に答える