如何知道何时使用现有的Exception或编写自定义异常?

Edw*_*uay 4 c# exception custom-exceptions

感谢关于这个问题的输入,我决定让我的Create()方法抛出异常,这样Jon Skeet说,你不必在任何地方处理它们,只能让它们冒泡,似乎是最好的方法适用于大型应用.

所以现在用这段代码创建我的类的实例:

try
{
    SmartForms smartForms = SmartForms.Create("ball");
    smartForms.Show();
}
catch (CannotInstantiateException ex)
{
    Console.WriteLine("Item could not be instantiated: {0}", ex.Message);
}
Run Code Online (Sandbox Code Playgroud)

自定义异常:

using System;

namespace TestFactory234.Exceptions
{
    class CannotInstantiateException : Exception
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

我如何知道要使用哪个Exception类?

在上面的例子中,我创建了自己的Exception,因为我不知道从哪里获取"所有系统异常"列表,或者是否存在"无法实例化对象"或者是否具有其他含义使用它等等.选择一个异常类型对我来说似乎总是这样一个任意的过程,所以创建我自己似乎是最好的想法.

或者我错过了一些关于异常的事情?决定使用哪种Exception类型还涉及哪些其他含义?

Jon*_*eet 5

如果您无法创建对象的原因是因为Create的参数无效,您应该抛出一个ArgumentException.但是,ArgumentException如果您真的希望能够将这种异常分别处理给其他人,则可以始终创建自己的类.(你确定你要?)