.NET中的错误和异常有什么区别?

Ami*_*mit 14 .net c# exception

你能否向我解释一下错误和异常之间的区别?

Joh*_*ers 13

异常是从System.Exception类派生的类型的对象.它在throw语句中用于将控制转移到调用堆栈中某个位置catchtry块中的子句.

错误只是您要解释的一些代码或消息.错误代码的问题是您可以决定忽略它们:

MethodThatReturnsAnError();
SomeCodeThatShouldNotExecuteOnError();
Run Code Online (Sandbox Code Playgroud)

如果返回一个错误代码,该调用将简单地忽略错误代码.然而:

MethodThatThrowsAnException();
SomeCodeThatShouldNotExecuteOnError();
Run Code Online (Sandbox Code Playgroud)

这是不可忽视的,并且会将控制权转移到堆栈,超过" SomeCodeThatShouldNotExecuteOnError();".

  • @LucasB:可以忽略错误代码的事实_是错误代码的问题.这加上他们在语义上轻量级的事实. (4认同)
  • @CrimsonX:完全正确.通过用人眼或工具查看代码,可以明显地忽略异常这一事实. (3认同)

Mic*_*ows 13

异常是一个利用语言语义的类.正如其他人所说,异常会中断执行堆栈直到被捕获.可以使用异常来传达错误,但更常见的是用于表示已发生异常的事件.

另一方面,错误可能是例外与否.

有几种错误:

  • 用户错误 - 应该无异常地处理
  • 语法错误 - 这不应该在静态类型语言中编译(在动态语言中,它们有点难以发现)
  • 运行时错误 - 这将导致异常,或者无提示失败(通常会产生意外结果)

实际上,异常应限于处理运行时错误,因为输入错误数据的用户不是"例外".要处理用户错误,您应采取以下方法:

  • 防止输入错误数据(前端验证)
  • 防止坏数据被持久化(后端验证)

应将异常用作用户错误的"最后一道防线".如果您正在编写持久层,则可以依赖异常来确保通过验证而丢失的错误数据不会持久存在.但是,您应该通过在验证中添加一个修复程序来解决这些错误,从而防止错误首先发生.

  • 我想我说得不够好.例外情况不应该是确保正确输入的主要机制.如果错误的数据通过验证,那么它就变成了一个例外情况.当我说"可以使用异常来传达错误"时,这就是我的意思.我会做"可以"斜体. (3认同)
  • @TrueWill - 我希望有可能发表评论.;)不应使用异常处理用户错误,因为用户错误不是异常情况.用户错误始终发生.想一想必须验证的文本框中的输入不正确.例外对性能有很大影响,不应用于处理应该成为设计和要求一部分的条件. (2认同)
  • @Nick @TrueWill我认为你是对的.在用户输入错误数据的情况下,它并不例外,但如果程序员允许它进入持久层,那么它确实变得异常.在保存错误数据时,代码不知道如何响应某些数据_不会被保存的事实,因此创建了一个例外情况.**编辑**将"比"更改为"然后".我讨厌混合那些. (2认同)