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 回答