繁体   English   中英

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

[英]What is the difference between an error and an exception in .NET?

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

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

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

MethodThatReturnsAnError();
SomeCodeThatShouldNotExecuteOnError();

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

MethodThatThrowsAnException();
SomeCodeThatShouldNotExecuteOnError();

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

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

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

有几种错误:

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

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

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

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

通常,我将它们归类为:

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

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

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

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

HTH。

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

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

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

错误可能发生在两个级别

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

编译CustomError ... CustomError错误....错误编译注意 - 页面级错误处理会覆盖应用程序级错误处理。

异常处理: - >

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

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


说完了,

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

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

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

错误是事件。 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

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

错误和例外

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM