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中添加条件逻辑,那么还必须向SomeMethod(以及调用ExitMethod的所有其他方法)添加条件逻辑,以便在某些实例中跳过您永远不希望执行的代码,而不是在其他实例中。这会带来混乱的设计,当存在更直接的路径时,会增加必要的代码。最好应用您的条件并返回true或false,然后从中进行处理。您这样想是对的。但实际上,最正确的方法是从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");
}