如何创建和遍历方法组列表

时间:2018-10-26 19:39:20

标签: c#

我有一系列接受要运行的类型的通用方法。例如:

db.CreateTable<MyClassName>();

我希望能够创建一个类列表,然后像这样遍历该列表:

foreach(var class in classList)
{
    db.CreateTable<class>();
    db.CheckStatus<class>();

    // ... etc
}

VS表示参数为method group。我用谷歌搜索,文档说这是一个委托。如何创建指向我的类的委托人列表,然后可以对其进行迭代并用作对泛型方法的引用?

1 个答案:

答案 0 :(得分:3)

我的答案做了一个假设,我刚刚意识到可能是无效的:我假设classListIEnumerable<Type>。如果那是不正确的,我的答案将需要修改。

它必须像这样。

var fn = db.GetType().GetMethod("CheckStatus");

foreach (var cls in classList)
{
    var fn2 = fn.MakeGenericMethod(cls);
    fn2.Invoke(db, null);
}

好的,这是怎么回事。我们获得了db对象上称为“ CheckStatus”的方法的引用。如果该方法有重载,则需要使用GetMethod的重载之一来获取它。

然后,将其设为封闭的泛型方法。因此,在第一部分中,我们获得了方法CheckStatus<T>,其中未指定T。这是 open 泛型。您需要使用您的类型信息填写通用名称。 MakeGenericMethod就是这样做的。实际上,它给您CheckStatus<cls>。然后,您可以在db上调用此方法。

有关打开/关闭的泛型的更多信息,请参见:What exactly is an “open generic type” in .NET?