C# 为什么我无法捕获从第三方库抛出的异常?

C# 为什么我无法捕获从第三方库抛出的异常?,c#,exception-handling,C#,Exception Handling,使用第三方库我体验到了有趣的情况。以下代码在异常时中断: var instance = new Class(arg); 但是,当这一行包含在try/catch块中时,将永远不会捕获异常 当然,只有在启用给定异常类型的中断时,VisualStudio调试器才会在异常上停止。禁用时,异常将完全消失。catch块永远不会执行。是否使用catch异常exc{}或catch{}并不重要。异常是从异常派生的 这怎么可能呢?我想这可能是一种常见的技巧或做法,即只包含调试异常。第三方库使用如下代码: publ

使用第三方库我体验到了有趣的情况。以下代码在异常时中断:

var instance = new Class(arg);
但是,当这一行包含在try/catch块中时,将永远不会捕获异常

当然,只有在启用给定异常类型的中断时,VisualStudio调试器才会在异常上停止。禁用时,异常将完全消失。catch块永远不会执行。是否使用catch异常exc{}或catch{}并不重要。异常是从异常派生的


这怎么可能呢?

我想这可能是一种常见的技巧或做法,即只包含调试异常。第三方库使用如下代码:

public class Class
{
    public Class(object arg)
    {
        try
        {
           ...
           throw new Exception("message");
           ...
        }
        catch
        {
            // This is just empty. By purpose.
        }
        finally
        {
            ...
        }
    }
}

如果配置了throw语句,则调试器会停止,但在处理异常时,它不会传播到其他任何地方…

我认为您误解了给定异常类型上的break行为。这是调试器的一项功能,可以在处理异常时实现收支平衡。库正在捕获并处理异常。你的接球挡没有被击中,因为它已经被接住了。如果你有图书馆的资料来源,你会在另一个地方中断。这是第二次也是最后一次尝试以问答的方式分享我不得不思考的东西;无论如何,在处理异常的时候您是对的,正如我反编译了库一样,它是按照我在回答中描述的方式处理的。首先我觉得有点奇怪,所以我得出了一个结论,这只是调试中唯一的例外。如果您想查看www.aforgenet.com,则给定的类称为AForge.FilterInfoCollection并驻留在AForge.Video.DirectShow.dll中。也许公式化和简化的尝试看起来太愚蠢了,我又得到了一些否决票。我不确定为什么有人否决了这个问题,但我猜答案的否决票来自于被空的捕集块烧焦的人。不幸的是,我也发现了许多catch块是空的,或者只有一条注释,比如//TODO:弄清楚如何处理错误。你可能只是引起了一种情绪反应。我给它一个+1,让它回到0。