2012-10-04 39 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