如何创建例外助手?

时间:2009-06-09 16:55:47

标签: c# .net exception

我正在创建一个辅助方法来设置异常消息,自动设置String.Format,添加内部异常,设置命令行退出代码等;类似的东西:

public static void MyExceptionHelper(ExitCode code, string message) {}
public static void MyExceptionHelper(ExitCode code, Exception e) {}
public static void MyExceptionHelper(ExitCode code, Exception e, String message) {}
public static void MyExceptionHelper(ExitCode code, Exception e, String message, params object[] args) {}
// etc...

BCL有一些静态类可以做到这一点(例如mscorlib中的System.ThrowHelper)。
放这些的最佳地方在哪里?作为异常的重载构造函数,在一个单独的静态类(如BCL)中,作为异常本身的静态方法,还是在其他地方?

5 个答案:

答案 0 :(得分:2)

我推荐EnterpriseLibrary中的Exception应用程序块,它有一个非常优雅的设计来处理异常,如果你不想要所有的EntLib,我建议你复制它们的界面。

答案 1 :(得分:1)

我只是为你的异常类创建这些构造函数。

答案 2 :(得分:1)

对于这样的方法,我更喜欢重载的构造函数。您显然正在使用它来创建一个新对象,这就是构造函数的用途。

一旦你进入静态方法的世界,它们并不总是清楚它们应该在哪里结束。您需要分析谁将使用它们以及如何使用它们,然后检查每个潜在位置的优缺点。然后,你会知道把它们放在哪里。

答案 3 :(得分:0)

大多数情况下,BCL中的异常帮助程序是支持本地化的(通常包含在几乎所有.NET BCL程序集中都可以找到的SR内部类中。)一般的想法是你使用一个辅助方法,用于传递异常的一些基本数据,帮助程序处理资源检索和数据格式化,以便您创建异常。好处是您可以集中代码来处理可能从多个位置抛出但需要以相同方式创建的异常。因此,通常,与任何其他实用程序类或继承对象相同的想法......促进重用和可维护性。

至于把它们放在哪里......我喜欢在每个程序集中都有一个“内部区域”,它有一个异常帮助器,资源助手和其他内部“程序集支持”类型。

答案 4 :(得分:0)

这看起来你有足够的自定义行为来想要派生自己的异常类,并把这种行为放在它上面。根据您是否希望稍后与基本Exception正弦值异常进行交互,您可能希望在派生类上使用这些构造函数将基础设置为传入的异常,并对该异常进行修改。在你班上;多态性将允许该实例重新转换为基础异常以进行交互。