1

これは私がやろうとしているダミーの例です:

var ass = Assembly.Load("Dummy.Class.FullName");

var yy =
    from t in ass.GetTypes()
    let attributes = t.GetCustomAttributes(typeof(MyTestAttribute), true)
    where attributes != null && attributes.Length > 0
    select new { Type = t, Attributes = attributes.Cast<MyTestAttribute>() };

foreach (var x in yy)
{
    TestOpen<typeof(x.Type)>();
}

private void TestOpen<TEntity>() where TEntity : Entity, new()
{
}

クラス定義を取得してこの方法でジェネリックメソッドに渡すことができません。すべてを試しました。メソッドがコンパイル済みクラスを待機しているという特別な何かが欠けていると思います。リフレクションから、これを取得できません。正しいですか?

乾杯

4

1 に答える 1

1

MakeGenericMethodを使用して適切なメソッド定義を生成し、リフレクションを介して呼び出すことができます。

Type thisType = this.GetType();

var mi = thisType.GetMethod("TestOpen");

foreach (var x in yy)
{
    var gmi = mi.MakeGenericMethod(x.Type);
    gmi.Invoke(this, null);
}
于 2012-08-09T16:39:05.497 に答える