通过调用另一个方法退出方法

生命的回忆

所以我想通过调用另一个方法来退出方法或函数的执行。到目前为止,我只发现其他问题,而没有我需要的东西。

示例如下。

public static void SomeMethod() {
    // some code
    ExitMethod();
    // the next line of code will never be executed
    Console.WriteLine("Test");
}

private static void ExitMethod() {
    // if possible the execution of the Method above will be stopped here
}

ExitMethod将工作就像一个回报声明,只是因为它是一种方法,我可以更容易地添加,如果或其他条件给它。如果我经常在程序集中使用ExitMethod,则可以轻松地重构条件,在该条件下调用方法的执行将停止。


例如,这可以用于明显不安全的dll安全尝试中,因此它需要一个串行密钥,并且只有给出正确的密钥,它才会启用一些静态布尔,然后每次从dll中调用函数时都会对其进行检查。

提前致谢 :)

编辑:通过使用可以为取消任务调用的另一种方法,我想避免类似的事情:

public static void SomeMethod() {
    if (ExitMethod) return;
}

目的是仅需要调用负责处理事情ExitMethod方法。

乔纳森·迪金森

从问题中的评论中:

为什么没有更好的解决方案[...]?

隐式流控制通常被认为是一种反模式-甚至存在反对根本不存在异常的论点。存在故意不包含任何形式的隐式流控制的语言(例如Go)。

您可以使用以下几种方法。

显式流量控制

public bool ExitMethod() => // ...

public void SomeMethod()
{
  if (ExitMethod()) return;
  Console.WriteLine("Test");
}

如果没有DocComments,则布尔值返回值可能会令人困惑。枚举将导致自我记录代码:

public enum ExitParentStatus : byte
{
  Continue, Return
}

public ExitParentStatus ExitMethod() => // ...

public void SomeMethod()
{
  if (ExitMethod() == ExitParentStatus.Return) return;
  Console.WriteLine("Test");
}

具有状态的显式流控制

public enum RequestStatus : byte
{
  Processing, Handled
}

public class Request
{
  public RequestStatus Status { get; set; }
}

public void ExitMethod(Request request) => // ...

public void SomeMethod(Request request)
{
  ExitMethod();
  if (request.Status == Handled) return;
  Console.WriteLine("Test");
}

使用收益率回报

这为其他开发人员提供了他们正在接近设计不良的代码的线索,从而略微减少了发生错误的机会。

public void ExecuteConditionalCoroutine(IEnumerable<bool> coroutine)
{
  foreach (var result in coroutine)
  {
    if (result) return;
  }
}

public bool ExitMethod() => // ...

public IEnumerable<bool> SomeMethod()
{
  yield return ExitMethod();
  Console.WriteLine("Test");
}

ExecuteConditionalCoroutine(SomeMethod());

例外情况

如果要使代码无法调试,请使用此选项。

public bool ExitMethod() { throw new ExitParentMethodException(); }

public void SomeMethod()
{
  try
  {
    ExitMethod();
    Console.WriteLine("Test");
  }
  catch (ExitParentMethodException) { }
}

编译后

使用后锐化之类的方法自动注入分支。对于完全不可维护的代码,这是一种很好的方法。

[ExitsParentMethod]
public bool ExitMethod() => // ...

public void SomeMethod()
{
  ExitMethod();
  Console.WriteLine("Test");
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从另一个类中迅速调用另一个方法?

来自分类Dev

从另一个Java类调用静态方法

来自分类Dev

从另一个类调用paint()方法?

来自分类Dev

从Python的另一个类内部调用方法

来自分类Dev

有什么方法可以通过另一个函数参数调用一个函数吗?

来自分类Dev

从另一个jar文件调用方法

来自分类Dev

从另一个类调用方法

来自分类Dev

模拟另一个类方法的内部调用

来自分类Dev

无法从另一个类调用接口方法

来自分类Dev

在调用另一个方法时调用一个方法

来自分类Dev

Webpy,从另一个方法调用视图

来自分类Dev

JUnit调用一个方法并调用另一个方法将返回nullPointerException

来自分类Dev

调用另一个控制器的方法

来自分类Dev

我可以通过另一个类的方法调用python对象的字典吗?

来自分类Dev

从另一个活动中调用方法

来自分类Dev

如何通过调用另一个方法从一个对象的方法启动线程?

来自分类Dev

有什么方法可以通过另一个函数参数调用一个函数吗?

来自分类Dev

如何通过按钮和另一个方法调用一个方法

来自分类Dev

通过另一个类调用方法

来自分类Dev

从另一个JNI方法调用JNI方法

来自分类Dev

如果调用了另一个方法,则调用一个方法

来自分类Dev

从另一个impl方法调用impl方法

来自分类Dev

通过另一个方法调用一个方法

来自分类Dev

调用与另一个方法同名的对象的方法

来自分类Dev

通过从另一个类调用方法来更新信息

来自分类Dev

我如何通过另一个方法(例如主方法)的调用来运行testNG?

来自分类Dev

通过调用另一个方法退出方法

来自分类Dev

在另一个方法中调用另一个方法时出错

来自分类Dev

从另一个测试方法调用测试方法

Related 相关文章

热门标签

归档