为批次不同的错误代码创建异常类

时间:2010-02-18 06:33:54

标签: c# exception

我正在为映射程序MapInfo Pro编写一个自定义.Net SDK,mapinfo只公开了两个用于COM void Do(string cmd)string Eval(string cmd)的方法。当您使用这些方法之一并执行某些invaild时,它会返回一个带有错误消息的COMException,并从MapInfo中获取错误代码。例如,错误消息如下所示:

 418  "Table not found."

现在我想抛出某种意义上的完全异常,而不仅仅是一个带有数字和消息的异常,人们必须抓住然后使用if块来检查什么错误,他们说他们只想要抓住并做一些充满意义的事情。类似于TableNotFoundException

最大的问题是目前有1999个可能的错误消息,现在我不想为这些错误的每个人提供异常类。

SDK的想法是人们使用我的对象和方法而不是DoEval(如果他们想要,他们可以使用它们。)

我应该,

  • 我的SDK中的任何地方,我调用DoEval使用try catch,然后检查错误代码并从那里抛出更多含义,因为我知道应该得到什么错误。< / LI>

  • 我在DoEval中有一些神查找列表,当抛出COMException时,它会查找错误代码并从那里抛出有意义的错误?意思是我不必在try catch块中包含对DoEval的每次调用(有很多调用)

要解释一些棘手的事情,所以我希望人们能够理解它。

感谢。

2 个答案:

答案 0 :(得分:3)

将调用传递给您自己的函数中的DoEval,以捕获MapInfo错误。

由于错误类型太多,您可以使用一些更具描述性的名称创建枚举,或者将错误编号的字典映射到更友好的名称(如果原始名称不够好) - 您不希望1999例外类,所以我建议只使用一个包含错误号和描述的异常类。您说用户可以直接使用DoEval,因此无论如何他们应该知道如何处理这些错误号。

或者,您可以创建一些分层异常类型并决定要抛出哪一个(需要字典映射0-1999 =&gt;匹配异常类型) - 这样,用户可以更具体地了解哪些类型的要抓住的错误。

答案 1 :(得分:0)

根据AndiDog,创建一些异常类,将几千个错误分组为一些合理的类型。您可能仍应传递原始错误号,以防万一。

在您这样做的同时,请阅读this article以了解这些群组的组合方式,以及您可能不想捕捉的群组。