所以我想通过调用另一个方法来退出方法或函数的执行。到目前为止,我只发现其他问题,而没有我需要的东西。
示例如下。
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] 删除。
我来说两句