C# 确定稍后要执行的函数调用

C# 确定稍后要执行的函数调用,c#,C#,因此,我试图编写一个战斗系统,非常像神奇宝贝,用户可以选择一个动作,生成一个敌人的动作,然后这两个动作都按照他们的速度统计数据确定的顺序执行。 我希望玩家执行的移动类型可能会有所不同,例如由一个具有3个参数的函数定义的攻击,或者由一个仅具有2个参数的函数定义的与另一个玩家切换。所以我需要做的是用不同的函数和参数来确定一个函数调用,这些函数和参数会对一些动作进行编程,然后以某种方式存储它,这样我可以在以后轮到它们时调用它。 我正在努力想办法实现这一目标。我能想到的唯一方法是将函数调用编写为字符串,

因此,我试图编写一个战斗系统,非常像神奇宝贝,用户可以选择一个动作,生成一个敌人的动作,然后这两个动作都按照他们的速度统计数据确定的顺序执行。 我希望玩家执行的移动类型可能会有所不同,例如由一个具有3个参数的函数定义的攻击,或者由一个仅具有2个参数的函数定义的与另一个玩家切换。所以我需要做的是用不同的函数和参数来确定一个函数调用,这些函数和参数会对一些动作进行编程,然后以某种方式存储它,这样我可以在以后轮到它们时调用它。 我正在努力想办法实现这一目标。我能想到的唯一方法是将函数调用编写为字符串,然后稍后再执行,但这并不优雅,特别是因为C#没有方便的执行字符串的方法。 如果有人对我如何实现这一目标有任何建议,我将不胜感激:)

编辑:这是我的代码

manager.attack (10, currentPlayer, enemy);
checkIfPlayerWon ();
manager.attack (10, enemy, currentPlayer);
checkIfPlayerLost ();

所以,我想用任何行动来取代教练的进攻部分。因此,它可以是manager.attack(),也可以是带有2个参数的manager.switchPlayers()。

我认为Jon Skeet的建议是使用特定数量的参数(甚至是0)创建一个代理来包装操作。然后你可以把它传给别人,在适当的时候给它打电话

粗略的例子:

private Action GetPlayerAction(manager, player, enemy, actionType, param1, param2, param3)
{
    switch(actionType) {
        case actionType1:
            return () => { manager.attack(param1, player, enemy); checkIfPlayerWon(); }
        case actionType2:
            return () => manager.heal(param2, player);
        // ....
    }
}


// to use
var playerAction = GetPlayerAction(manager, player, enemy, param1, param2);

// do some things ...

playerAction();

C#允许您将字符串编译为代码,因此它可以是一种方式,但我认为您需要的是反射,对函数进行硬编码,然后通过反射执行它们。听起来您只是在寻找一个委托。不需要字符串解析或类似的东西。如果你能在代码中提供一个具体的例子,你会更容易得到帮助。所以我查看了代理,但我认为他们必须有一组参数。所以代码方面我有这样一个:
manager.attack(10,当前玩家,敌人);checkIfPlayerWon();经理。攻击(10,敌人,当前玩家);checkIfPlayerLost()我想要的是用任何移动重放攻击功能。因此,可能是manager.attack或manager.switchPlayers,它们只接受两个参数。您可以保存委托的一个keyvaluepair和一个对象数组,这些对象将作为参数发送到问题中的方法。感谢您对此进行扩展。因此,如果我理解正确,我将创建一个委托函数,其中包含它调用的函数所需的最大数量的参数,然后返回相应函数的结果?