C# 通过调用另一个方法退出某个方法

C# 通过调用另一个方法退出某个方法,c#,C#,所以我想通过调用另一个方法来退出方法或函数的执行。到目前为止,我只发现了其他方面的问题,没有发现我需要的东西 示例如下 public static void SomeMethod() { // some code ExitMethod(); // the next line of code will never be executed Console.WriteLine("Test"); } private static void ExitMethod() {

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

示例如下

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的工作原理与return语句类似,只是因为它是一种方法,我可以更容易地向它添加if或其他条件。如果我经常在我的程序集中使用ExitMethod,我可以很容易地重构停止调用方法执行的条件


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

提前感谢:)

编辑: 通过使用另一种可以为取消任务调用的方法,我希望避免以下情况:

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

目标是只需要调用处理事情的ExitMethod方法。

问题中的注释:

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

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

以下是一些您可以使用的方法

显式流量控制 如果没有DocComments,布尔返回值可能会令人困惑。枚举将产生自文档化代码:

public enum ExitParentStatus : byte
{
  Continue, Return
}

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

public void SomeMethod()
{
  if (ExitMethod() == ExitParentStatus.Return) return;
  Console.WriteLine("Test");
}
带状态的显式流控制 使用收益率回报 这为其他开发人员提供了线索,表明他们正在接近设计糟糕的代码,从而略微降低了出现bug的可能性

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());
编后 使用类似的方法自动注入分支。对于完全不可维护的代码,这是一种很好的方法

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

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

对不起,我不明白。。为什么不使用if语句呢?在
ExitMethod()
中抛出异常如何?或者您可以使
ExitMethod
返回一个
bool
,并像
if(ExitMethod())返回一样使用它ExitMethod
返回一些内容,并使用
if(…)返回将调用包装起来公平地说,您可能的应用程序(“通过使用可以为取消任务调用的另一种方法,我希望避免类似…”)描述了您想要做的事情,但没有描述您想要做的原因。没有明显的理由说明为什么有人想要调用一个方法来退出一个方法,而不是使用一个公共的IF语句。如果我们知道您为什么希望避免使用If语句,我们可能会为您提供更好的解决方案。您有一些非常有趣的事情,但从我所知和评论来看,这是一个非常可靠的解决方案。请注意,不需要尝试就可以处理异常。
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");
}