我正在为映射程序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的想法是人们使用我的对象和方法而不是Do
和Eval
(如果他们想要,他们可以使用它们。)
我应该,
Do
和Eval
使用try catch,然后检查错误代码并从那里抛出更多含义,因为我知道应该得到什么错误。< / LI>
或
Do
和Eval
中有一些神查找列表,当抛出COMException
时,它会查找错误代码并从那里抛出有意义的错误?意思是我不必在try catch块中包含对Do
和Eval
的每次调用(有很多调用)要解释一些棘手的事情,所以我希望人们能够理解它。
感谢。
答案 0 :(得分:3)
将调用传递给您自己的函数中的Do
和Eval
,以捕获MapInfo错误。
由于错误类型太多,您可以使用一些更具描述性的名称创建枚举,或者将错误编号的字典映射到更友好的名称(如果原始名称不够好) - 您不希望1999例外类,所以我建议只使用一个包含错误号和描述的异常类。您说用户可以直接使用Do
和Eval
,因此无论如何他们应该知道如何处理这些错误号。
或者,您可以创建一些分层异常类型并决定要抛出哪一个(需要字典映射0-1999 =&gt;匹配异常类型) - 这样,用户可以更具体地了解哪些类型的要抓住的错误。
答案 1 :(得分:0)
根据AndiDog,创建一些异常类,将几千个错误分组为一些合理的类型。您可能仍应传递原始错误号,以防万一。
在您这样做的同时,请阅读this article以了解这些群组的组合方式,以及您可能不想捕捉的群组。