我正在尝试创建一个包含方法的列表,在我添加一些我想要执行它们的方法后,这可能吗?
我试过这样的事情:
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 是什么,如何以及何时使用