我是从 C++/Win32 开发环境迁移到 C#/.NET 的人。我注意到的一件事是,大多数错误状态是在 C++/Win32 中通过使用错误代码及其传播来处理的。
相反,C#/.NET 中的大多数错误状态似乎是通过使用异常来处理的,并且很少建议使用错误代码。
为什么这样?
我是从 C++/Win32 开发环境迁移到 C#/.NET 的人。我注意到的一件事是,大多数错误状态是在 C++/Win32 中通过使用错误代码及其传播来处理的。
相反,C#/.NET 中的大多数错误状态似乎是通过使用异常来处理的,并且很少建议使用错误代码。
为什么这样?
错误代码的主要问题是需要检查它们。总是。
我们只是人类,可以忘记。
这可能意味着我们可以通过简单地忘记检查错误代码来让我们的程序进入不一致的状态。
但是,如果我们忘记处理异常,我们的程序将退出。
这被认为比它继续在不一致的状态下运行更可取。
错误代码在 C/C++ 代码中仍然普遍存在的大部分原因是历史原因 - 这些语言没有异常处理,因此需要错误代码。并且有很多库和代码符合这个习惯用法,所以程序员需要遵守它。
除了不能忽略它们之外,还有其他使用异常的原因——正如Marc 所观察到的,它们带有很多上下文——堆栈跟踪、消息等等,超出了异常的类型。
我要说的主要原因之一是错误代码是特定于平台的。.NET 最初设计为可移植的。
例如,aFileNotFoundException
比一些晦涩的数字更通用,这些数字可能会因您运行的平台而异。