如何创建一个可以执行传递给它的任何其他方法的方法

How to make a method that can execute any other method passed to it

我正在尝试制作一个应用程序,它将对目录中的每个文件执行某事

那个东西应该是某种方法。但是因为我不知道具体是哪种方法,所以我正在尝试实现它,所以我的 "iterating" 方法接受任何方法的参数或某种方法引用,这样他就可以在每个文件上调用它。

重点是关于如何处理每个文件有很多选项,用户可以选择他想要的那个。这些选项也必须开放扩展,所以一周后我可能会决定添加一个新选项,这就是为什么我需要:

一种可以调用任何方法的方法,而无需事先了解其签名。

Actions 和 Functions 对我不起作用,因为它们需要具体的签名。委托也是如此,据我所知并且(我认为)它们不能作为方法参数传递。

我想要实现的示例:

void Iterate(DirectoryInfo dir, method dostuff)
{
    foreach(var file in dir.GetFiles())
    {
        dostuff(file);
        //And this is the point where I feel stupid...
        //Now I realise I need to pass the methods as Action parameters,
        //because the foreach can't know what to pass for the called method
        //arguments. I guess this is what Daisy Shipton was trying to tell me.
    }
}

您的想法可以实现,但是执行某事的函数必须始终具有相同的签名;为此,您可以使用预定义的委托类型。考虑以下代码段。

public void SomethingExecuter(IEnumerable<string> FileNames, Action<string> Something)
{
    foreach (string FileName in FileNames)
    {
        Something(FileName);
    }
}

public void SomethingOne(string FileName)
{
    // todo - copy the file with name FileName to some web server
}

public void SomethingTwo(string FileName)
{
    // todo - delete the file with name FileName
}

第一个函数可以如下使用。

SomethingExecuter(FileNames, SomethingOne);
SomethingExecuter(FileNames, SomethingTwo);

希望对您有所帮助。