2012-10-04 80 views
3

我正在使用一些外部代碼,當使用某些參數調用時會拋出一個可以忽略的異常。不幸的是,由於各種原因,我無法更改此外部代碼。避免打破生成的代碼

我創建了看起來像這樣的包裝方法:

[DebuggerStepThrough] 
    public static bool TryGetXXX(string input, out string output) 
    { 
     try 
     { 
      output = MethodThatSometimesFails(input); 
      return true; 
     } 
     catch 
     { 
      output = null; 
      return false; 
     } 
    } 

    private static string MethodThatSometimesFails(string input) 
    { 
     // Don't want this to cause a break 
     // but can not put the attribute on this method 
     throw new Exception("couldnt deal with your request"); 
    } 

但不幸的是,外部代碼仍然會在異常打破內部MethodThatSometimesFails[DebuggerStepThrough]只會避免調試上面的代碼,但被調用的代碼仍然會丟失。

我想要的是即使在「Exceptions ...」窗口中選中了所有複選框,代碼也會運行。有沒有可以做到這一點的屬性?

如果沒有屬性,我可以創建一個包含這些類/方法的項目並排除整個項目。有沒有辦法做到這一點?

+0

你的Tools-> Optoins-> Debugging->異常跨越AppDomain設置時中斷嗎? http://social.msdn.microsoft.com/Forums/en-US/csharpide/thread/a4c32d57-9046-41c4-bf8b-3718ff474847/ –

+1

由於調試器配置設置:Debug + Exceptions,Thrown複選框,您會得到此信息。沒有任何事情可以做,但取消勾選該複選框。 –

+0

我希望拋出此方法之外的其他異常,並讓我看到它們,所以我想不要剔除拋出的複選框就是這個問題的目的。作爲開發人員,我希望始終知道在開發階段是否會拋出部分代碼中的異常。錯誤的類型是ApplicationException,所以它的範圍很廣,我不得不通過取消選中來限制它。 – Blueberry

回答

0

無法找到一個解決方案。最後,唯一的選擇是將TryGet放入另一個DLL中!

0

如果您知道有效參數是什麼,請在調用函數之前檢查它們。如果它們無效,請不要調用該函數。

試着保持樂觀並消除對可能代價高昂的異常的依賴。

+0

我的理解是OP不能做到這一點。他正試圖處理這種需要他容忍例外的情況。 – usr

+0

@usr我的意思是在'TryGet ...'方法。 –

+0

感謝丹尼爾,不幸的是,有一個整個圖書館通過這種方法被調用,圖書館的工作是知道什麼是有效的,什麼是沒有的。不幸的是,他們沒有提供TryGet。 – Blueberry