C# 每个程序员都应该知道哪些框架异常?

C# 每个程序员都应该知道哪些框架异常?,c#,.net,exception,C#,.net,Exception,我最近在C#中启动了一个新项目,当我在一个函数中编写一些异常抛出代码时,我发现我真的不知道应该使用哪个异常 以下是许多程序中经常抛出的常见异常: 您的程序中是否经常使用框架异常? 每个.net程序员都应该知道哪些异常? 何时使用自定义异常 编辑:为了澄清主题,最初的问题更多的是“我可以抛出哪种异常?”而不是“我应该捕获哪种异常?”。 你的名单上还有一些遗漏 此链接是您列表中的一个很好的补充: 当我必须使用特定于应用程序逻辑(而非框架)的某些逻辑引发异常时,我会使用自定义异常 这

我最近在C#中启动了一个新项目,当我在一个函数中编写一些异常抛出代码时,我发现我真的不知道应该使用哪个异常

以下是许多程序中经常抛出的常见异常:

您的程序中是否经常使用框架异常? 每个.net程序员都应该知道哪些异常? 何时使用自定义异常

编辑:为了澄清主题,最初的问题更多的是“我可以抛出哪种异常?”而不是“我应该捕获哪种异常?”。


你的名单上还有一些遗漏

此链接是您列表中的一个很好的补充:


当我必须使用特定于应用程序逻辑(而非框架)的某些逻辑引发异常时,我会使用自定义异常

这意味着,如果我的业务层接收到一个与正在执行的功能不匹配的值,那么我将引发一个自定义异常。如果用户试图对我的业务规则禁止的数据库记录执行某些操作,那么这也是自定义异常的一个很好的候选对象


基本上,您可以创建自定义异常来区分应用程序或特定于业务的异常与常规系统异常。您的自定义异常仍应派生自
System.Exception
。使用它们的好处是,您可以编写捕获它们的代码并采取特定的操作-当您有一个随机的
系统时,您不能总是采取特定的操作。由于逻辑错误或bug,异常

索引自动失效异常

在尝试索引时引发 通过小于 零或超出 数组。 -MSDN


我确信您必须了解每个内置异常类。您应该知道哪些异常可以抛出,哪些不可以抛出。您应该了解.net framework如何处理内置异常。您应该知道什么时候最好继承exist类,什么时候定义自己的类型。有许多预定义的异常,您几乎总能找到合适的异常

我建议你在杰弗里·里希特的书中读到这一点。

OutOfMemoryException

您需要知道为什么会发生这种异常,以及为什么不应该尝试处理它。


ThreadAbortException,因为它在每次捕获块后都会以奇怪的方式自我复活

这应该是社区wiki。@klausbyskov:是的,忘了检查它了。更正;-)我抛出的几乎每个异常都是您列出的三个异常之一。我通常在库中使用自定义异常。-1因为这是一个毫无意义的问题。接下来是什么,在C#中应该知道哪些命令,比如int a=3和“if”?@Phil-这个问题很愚蠢,如果你不知道要使用什么异常,请查看MSDN上的异常列表并选择一个。如果你不介意或者找不到一个,那么使用一个通用的异常或者创建你自己的异常。这个帖子是无用的,因为下面的答案是msdn的例外列表(OP可以在5秒钟内用谷歌搜索到),以及人们能记住的最多的例外。这个问题带来了什么好处?为什么值得投票呢?你自己真的抛出了一个OutOfMemoryException?在什么情况下?我认为从ApplicationException派生比从Exception派生更好。然后,您可以区分ApplicationException和SystemException(框架抛出的是…。@Carles Microsoft不再建议从ApplicationException派生:etcThanks链接。这就是我想要的。我想,如果你试图处理这个异常,你的代码不是完美的。在开始时简单检查数组是否为null或空可以避免此异常。
int SafeDivision(int x, int y)
{
    try
    {
        return (x / y);
    }
    catch (System.DivideByZeroException dbz)
    {
        System.Console.WriteLine("Division by zero attempted!");
        return 0;
    }
}