【问题标题】:c# return that also returns the calling function - similar to PHP's die() early out [duplicate]c# return 也返回调用函数 - 类似于 PHP 的 die() [重复]
【发布时间】:2018-06-12 22:42:28
【问题描述】:

注意:这是一个从 PHP 角度来看 C# 的问题。也许这不是正确的方法,但这是我正在尝试做的。

假设你已经定义了:

void Die(string error){
 print(error);
 return; 
}

你从另一个方法调用它:

void CallingFunction(){
  if(SomethingDoesNotCheckOut())
   Die("bla");

  // do stuff
}

是否有可能让 Die() 也触发调用它的“父”方法中的早期输出?


一个例子:

void CallingFunction(){
  if(index>arrayLength)
   Die("that's too big!");

  // do stuff
}

似乎 try-catch 对此有点过头了,但我宁愿只调用一个函数来停止当前的“父”函数。可能是我想太多像PHP's die()

【问题讨论】:

  • 你说的early out是什么意思?
  • 异常,trycatch 是处理 C# 错误的最佳方法。返回值更多的是 C 风格。
  • 看你的标题和代码我认为当一切正常时你只需要一个 else 块
  • if(somethingbad) { Die("reason"); return;} else { 做事 }
  • 如果“未知用户”编写错误代码是因为他们不了解控制流,那么这就是他们的问题。除了异常之外,C# 中没有与“死”等价的东西。但是,对于正常的控制流,您应该使用return。您的示例是一个方法的简单保护子句,如果它足够严重,它要么是一个异常,要么是一个简单的返回(如果不是)。简单地说,不要创建“死”方法,你应该没问题。如果您需要记录故障,则将该方法改为记录方法,并且没有人会认为它会在此过程中“强制提前返回”。

标签: c# php


【解决方案1】:

不是没有抛出异常,不是。请记住,在许多情况下,调用方法将是非 void - 在这种情况下,您希望它返回什么值?

老实说,您所描述的用例听起来确实最好处理异常。这就是 C# 惯用的错误处理机制。

如果您想使用异常来收集错误,则必须显式返回。

【讨论】:

    【解决方案2】:

    通常您会为此目的使用异常。只需抛出Exception

    void Die(string error){
     print(error);
     throw new Exception(error); 
    }
    

    您可以随时通过在更高级别实现try ... catch 来处理它。

    try
    {
        // Something that can call Die.
    }
    catch (Exception ex)
    {
        // Something threw an exception. Now handle it.
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 2021-01-26
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多