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

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

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

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

有几种错误:

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

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

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

应将exception用作用户错误的“最后一道防线”。 如果您正在编写持久层,则可以依赖exception来确保通过validation的不良数据不会被持久化。 但是,您应该通过在validation中添加一个可以防止错误发生的修复来解决这些问题。

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

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

 MethodThatReturnsAnError(); SomeCodeThatShouldNotExecuteOnError(); 

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

 MethodThatThrowsAnException(); SomeCodeThatShouldNotExecuteOnError(); 

这是不可忽视的,并且会通过“ SomeCodeThatShouldNotExecuteOnError(); ”将控制权转移到堆栈。

您必须编写代码才能忽略的例外情况。 您必须编写错误代码才能忽略。

通常,我将它们归类为:

错误 – 是应用程序中的已知工作流程。 例如:身份validation期间未提供的用户名是错误。
应用程序可以处理这些情况,并且能够向用户显示友好消息,以提示正确输入和/或处理不同的数据。

exception – 通常在离开系统时抛出和/或应用程序中发生意外情况。 例如:由于权限不足或文件不存在,打开文件句柄可能会引发exception。
通常在这种情况下,应用程序可以捕获这些exception和/或编写通用处理程序来处理系统中的所有exception。

根据经验,如果您知道由于应用程序无法继续工作而存在特定情况,请将其标记为错误并正常处理该情况。

所有剩余的“未知 – 未知”都可以归入“例外”类别。

HTH。

如果没有给定exception的exception处理程序,程序将停止执行并显示错误消息。

未处理的exception是错误。 因此所有错误都是例外,但事实恰恰相反。 exception处理技术处理exception/意外情况(错误),而错误是我们预期不会发生的情况,我们必须通过将用户重定向到一些静态HTML页面并将其捕获到Logs&来处理它们。想出了一个错误的解决方案。

错误可能发生在两个级别

  • 页面级别(在页面指令处使用ErrorPage属性)
  • 应用程序级别(需要在web.config中处理)

编译CustomError … CustomError错误….错误编译注意 – 页面级error handling会覆盖应用程序级error handling。

exception处理: – >

例外是报告和处理执行失败的一种方式。 换句话说,它们用于传达错误条件(在“ 框架设计指南”一书中解释Krzysztof Cwalina)。

例外 :当某个操作中的某个步骤失败时,该操作中的所有后续步骤都不会被执行。 这是exception闪耀的地方。

错误:就像在第一种情况下你想要暂停当前代码的执行一样,但在此之前你需要释放以前分配的任何资源。


说完了,

Exception类具有HResult属性 。 HRESULT是一个32位值,分为三个不同的字段:严重性代码,设施代码和错误代码

看看这篇文章,将有助于您更好地理解

  • 错误代码或例外?

错误是事件。 exception类表示在应用程序执行(运行时)期间发生的错误,并提供使用try catch块处理它们的机制。 错误可能是运行时或编译器错误。

错误事件的示例:System.Web dll的HttpApplication.Error事件,System.IO的FileSystemWatcher.Error事件两个dll都具有相同的Error事件定义

 public event EventHandler Error 

来自.Net Framework 4.5文档https://msdn.microsoft.com/en-us/library/system.exception(v=vs.110).aspx

exception类表示在应用程序执行期间发生的错误。

错误和例外

出于各种原因可能会发生运行时错误。 但是,并非所有错误都应作为代码中的exception处理。 以下是运行时可能发生的一些错误类别以及响应它们的适当方法。

使用错误。 使用错误表示程序逻辑中可能导致exception的错误。 但是,错误不应通过exception处理来解决,而应通过修改错误代码来解决。

程序错误。 程序错误是运行时错误,无法通过编写无错代码来避免。

在某些情况下,程序错误可能反映预期或常规错误情况。 在这种情况下,您可能希望避免使用exception处理来处理程序错误,而是重试该操作。

在其他情况下,程序错误反映了可以在代码中处理的意外错误情况。

系统故障。 系统故障是运行时错误,无法以有意义的方式以编程方式处理。 例如,如果公共语言运行库无法分配额外的内存,则任何方法都可以抛出OutOfMemoryExceptionexception。 通常,使用exception处理不会处理系统故障。 相反,您可以使用AppDomain.UnhandledException等事件并调用Environment.FailFast方法来记录exception信息,并在应用程序终止之前通知用户失败。