【问题标题】:How to stop a method with a method inside it?如何用其中的方法停止方法?
【发布时间】:2021-12-29 17:02:19
【问题描述】:

基本上,如果它处于冷却状态,我想打破该方法。但是当我在方法中移动 if 语句时,它将不起作用。 return 关键字只会返回上一个方法并继续其余的。 有什么办法吗?

【问题讨论】:

  • 如果CooldownCheck返回bool怎么办?
  • 请将代码发布为文本,而不是图像!这样我们就可以复制粘贴来建议更改或在 VS 中进行测试。
  • do not upload images of your code。从外观上看,最好的做法是让CooldownCheck 返回一个布尔值,如果它返回true,则让Interact 返回。另一种选择是让它抛出一个异常,然后再追上它。
  • 明确一点——如果冷却时间没有过期,你想退出调用方法(Interact)吗?
  • 好吧,对不起,我对编程和这个网站还很陌生。是的,我只是想将方法从主要方法中包装出来。Olivier 已经用 bool 方法回答了。

标签: c# unity3d


【解决方案1】:

CooldownCheck 方法返回停止状态,例如,通过布尔值:

public void Interact()
{
    if (CooldownCheck()) {
        InInteract.Invoke();
        lastCooled = Time.time + cooldown;
    }
}

private bool CooldownCheck()
{
    if (lastCooled <= Time.time) {
        Debug.Log(stuff);
        return true;
    }
    return false;
}

顺便说一句,您的 else { return; } 毫无意义,因为任何 void 方法的末尾都有一个隐含的 return;。 return-statement 不会停止任何事情,它会从方法中返回,即在此时离开方法并继续运行调用者,即调用者将执行下一条语句。

中断调用者的一种方法是抛出异常。但这在这种情况下似乎不合适。

【讨论】:

  • 是的,应该在实际出现严重错误时使用异常...bool 在这种情况下应该是的方法
猜你喜欢
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多