2010-02-18 27 views
3

我正在爲映射程序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使用嘗試捕捉,然後檢查錯誤代碼並拋出更多的東西從那裏意滿了,因爲我知道我應該得到什麼樣的錯誤。

  • 我在DoEval是神查找列表somekind的當COMException拋出時查找錯誤代碼,並從那裏拋出meaningfull錯誤?這意味着我不必包裝在嘗試catch塊每次調用DoEval(有大量話費)

位的一個棘手的事情來解釋,所以我希望人們能理解它。

謝謝。

回答

3

在您自己的函數中調用DoEval,該函數捕獲MapInfo錯誤。

由於錯誤類型太多,您可以使用一些更具描述性的名稱或字典將錯誤編號映射到更友好的名稱(如果原始的名稱不夠好)來創建枚舉 - 您不希望1999異常類,所以我建議只使用一個包含錯誤號和描述的異常類。你說用戶可以直接使用DoEval,所以他們應該知道如何處理這些錯誤號碼。

或者,您可以創建幾個層次結構的異常類型,並決定要拋出哪一個(需要某個字典映射0-1999 =>匹配的異常類型) - 這樣,用戶可以更具體地瞭解哪些類型的錯誤要抓住。

+0

++他說什麼,特別是關於一個小異常層次的部分。 – Dustman

0

根據AndiDog,創建幾個異常類,將幾千個錯誤組合成一些合理的類型。以防萬一,您應該仍然可以傳遞原始錯誤編號。

當你這樣做,讀this article理清這些羣體可以如何組裝,也許哪些你不想要趕上。

+0

有人有搜索引擎優化問題?爲什麼要改變它上面所有nofollows的鏈接文本? – Dustman

相關問題