【问题标题】:C# why throw errors [closed]C#为什么抛出错误[关闭]
【发布时间】:2012-03-22 23:43:36
【问题描述】:

我没有得到throw 关键字,为什么要使用它?它有什么好处?

到目前为止,我的 UI 类中已经有了这个:

try
{
  Classreference.MethodToRun();
}
catch (Exception ex)
{
  MessageBox.Show(ex.ToString(), "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

这可行,但我想使用throw 我可以让我调用的方法抛出错误并在我的 UI 类中捕获它?但为什么?它有什么更好的地方?是为了使类更加面向对象还是什么?我猜如果我只是在我的 UI 类中捕获错误,如果我更改我正在调用的方法,我不需要更改代码,而是更改正在更改的方法中的错误消息?

【问题讨论】:

  • 谷歌“C#异常处理最佳实践”并阅读所有可能的文章。
  • 啊!停止关闭巨星疯狂的人!这是一个真正的问题......其中有一些代码。这里有真正有用的答案。
  • @Josh - 查看编辑历史记录。这个问题一开始就难以理解。
  • @Oded - 添加评论以获取更多信息或清晰度。在你结束问题之前,给提问者一个机会至少符合标准。 SO的第一条准则应该是帮助人们。确保内容的高质量是遥不可及的事。
  • 那么请原谅我问了一个你当时不明白的问题冒犯了你。

标签: c# exception-handling try-catch throw


【解决方案1】:

您可以使用throw 关键字将异常抛出到更高的方法。

使用这种方式,您可以偶尔更好地利用异常,例如关闭数据库访问或类似的操作。

【讨论】:

    【解决方案2】:

    您使用 throw 来指示发生了错误或将现有错误传递给更高级别。

    当你想处理错误(异常)时使用 catch。

    抛出异常是对处理错误的旧程序方式的改进,您会返回错误代码。

    它更好的原因是因为您可以为简单的成功案例编写逻辑,当出现问题时,您只需抛出异常,在您的较低级别代码中没有错误处理。然后由应用程序的更高级别来决定在抛出特定异常时要做什么。

    【讨论】:

    • 这正是我所寻找的,简短而切题。谢谢。
    【解决方案3】:

    您在这里所做的实际上是掩盖了您可以从异常中获得的大量信息。 您通常想要做的是捕获异常,将相关信息记录到您可以查看它的某个地方(日志文件,数据库,事件日志),然后抛出(),这将使您的堆栈跟踪保持完整,或者抛出另一个“用户友好的”异常,它掩盖了技术实现。

    【讨论】:

      【解决方案4】:

      asawyer 是对的,您需要 google 并阅读错误处理,这是一个广泛的主题,您只有在练习、交谈和阅读后才能真正“明白”。 throw 是您可能不需要经常使用的东西,但您偶尔可以使用它来阻止不需要的行为并为使用您的方法的程序员创建更清晰的错误。我知道这很做作,但举个例子:

      public string WriteToFile(FileStream fs) {
        if (fs == null) {
          throw new ApplicationException("you passed a null filestream");
        }
      
        // write to file
      }
      

      您可以尝试将FileStream 写入文件而不对其进行验证,但这样做会为使用您的方法的任何人创建一个更容易理解的错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-16
        • 2021-11-17
        相关资源
        最近更新 更多