如何创建方法列表然后执行它们?

use*_*915 15 c# methods list

我正在尝试创建一个包含方法的列表,在我添加一些我想要执行它们的方法后,这可能吗?

我试过这样的事情:

List<object> methods = new List<object>();
Run Code Online (Sandbox Code Playgroud)

然后:

methods.Add(Move());
Run Code Online (Sandbox Code Playgroud)

但是当我添加时,程序将调用这些方法,例如,在这种情况下它会调用它 Move();

Bra*_*NET 28

这是Action泛型委托的一个很好的用例.

List<Action> functions = new List<Action>();
functions.Add(Move);

foreach (Action func in functions)
   func();
Run Code Online (Sandbox Code Playgroud)

如果你需要参数,我会使用lambdas来抽象它们:

List<Action> functions = new List<Action>();
functions.Add(Move);
functions.Add(() => MoveTo(1, 5));

foreach (Action func in functions)
   func();
Run Code Online (Sandbox Code Playgroud)

委托类似于来自C++的函数指针,它保存函数"是"(不是像您的示例中的返回值),因此您可以像常规函数一样调用它.Action泛型委托不带任何参数并且不返回任何内容,因此它非常适用于通用"调用这些函数".

MSDN for Action:Action Delegate


小智 7

我不确定这是否超出了原始问题的范围(或者会帮助其他人),但我一直回到这个页面,以自己搜索如何创建一个返回类型函数列表来迭代和执行。我最终使用List<Func<T>>来创建类型方法列表-

        bool RTrue()
        {
            Console.WriteLine("RETURNS TRUE");
            return true;
        }

        bool RFalse()
        {
            Console.WriteLine("RETURNS FALSE");
            return false;
        }

        List<Func<Boolean>> functions = new List<Func<Boolean>>();
        functions.Add(RTrue);
        functions.Add(RFalse);

        foreach (Func<Boolean> func in functions)
        {
            if (func() == true)
            {
                Console.WriteLine("IT WORKS");
            }
        }
Run Code Online (Sandbox Code Playgroud)

有关 Func 用法的更多信息 - Func 是什么,如何以及何时使用