在A班,我有

internal void AFoo(string s, Method DoOtherThing)
{
    if (something)
    {
        //do something
    }
    else
        DoOtherThing();
}


现在,我需要能够将DoOtherThing传递给AFoo()。我的要求是,DoOtherThing可以具有返回类型的任何签名几乎总是无效的。来自B类的东西,

void Foo()
{
    new ClassA().AFoo("hi", BFoo);
}

void BFoo(//could be anything)
{

}


我知道我可以使用Action或通过实现委托来做到这一点(如在许多其他SO帖子中所看到的),但是如果B类中函数的签名未知,又如何实现?

最佳答案

您需要传递一个delegate实例; Action可以正常工作:

internal void AFoo(string s, Action doOtherThing)
{
    if (something)
    {
        //do something
    }
    else
        doOtherThing();
}


如果BFoo是无参数的,它将按照您的示例编写:

new ClassA().AFoo("hi", BFoo);


如果需要参数,则需要提供它们:

new ClassA().AFoo("hi", () => BFoo(123, true, "def"));

关于c# - 如何将任何方法作为另一个函数的参数传递,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8638547/

10-11 14:16