感谢您的输入 这个问题, ,我决定使用我的create()方法 投掷例外 因此,正如乔恩·斯基特(Jon Skeet)所说的那样,您不必在任何地方处理它们,并且可以让它们起泡,似乎是大型应用程序的最佳方法。

因此,现在我使用此代码创建了我的类实例:

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

自定义例外:

using System;

namespace TestFactory234.Exceptions
{
    class CannotInstantiateException : Exception
    {

    }
}

我怎么知道要使用哪个例外类?

在上面的实例中,我创建了自己的例外使用它等。选择我的异常类型似乎总是如此 随意的 流程,因此创建自己似乎是最好的主意。

还是我错过了例外的东西?决定使用哪种异常类型的其他含义?

有帮助吗?

解决方案

如果无法创建对象的原因是因为创建参数是无效的,那么您可能应该扔一个 ArgumentException. 。但是,您总是可以创建我们自己的班级 ArgumentException 如果您真的希望能够分别处理这种例外。 (你确定你要?)

其他提示

为什么创建自定义异常? 很好地说明了为什么以及何时使用自定义异常。

创建一种新类型时,可以捕获并了解发生特定的特殊情况时可能有用。知道没有找到文件而不是通用的io例外吗?

写了一篇有关此主题的整个博客文章,您可能会发现有趣的

总而言之,除非您实际上希望某人同时捕捉并采取行动,否则请勿编写自定义异常类。

我认为找到现有例外的好地方将是在帮助文件中...如果您查找帮助 Exception 类,概述页面上应该有一个派生类列表。

如何决定是否创建一个新的(源自 Exception),或从现有的继承来取决于例外的含义。

正如乔恩(Jon)所说,如果您的代码对参数进行了一些验证 Create 方法,您可能想制作一个异常 ArgumentException (例如,也许 ArgumentNonExistentEntityException 如果指定的ID不存在,尽管这有点满是嘴巴)。

如果您正在创建的异常不会从概念上从已经存在的异常中“继承”其含义,则只是为您的库创建一个新的含义。

您将创建一个自定义异常类型,以提供更多的上下文信息或含义为错误,否则您将依靠生成的运行时类型类型。例如,当System.DivideByZero异常时,当它在应用程序中升至顶部时,异常可能并不明显。取而代之的是,您可以创建一个自定义异常,以提供以上“ DivideByZero”错误之外提供更多上下文信息。

有关不同运行时生成的异常的参考,请查看MSDN的系统名称空间。这不是详尽的列表,因为本机代码和第三方库可以生成异常。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top