2011-03-25 186 views
1

我有一个程序在VB.Net从Outlook接收邮件,提取附件并通过查询插入附件到表中。我想将查询/查询置于Try/Catch块中,但不能这样做,因为Outlook异常无法被捕获,并且它给了我一个错误,除非我提出了一个非常特定的异常,否则我无法捕捉到它。有没有解决方法?捕获不能捕获类型'Microsoft.Office.Interop.Outlook.Exception'

编辑:

Try 

    Catch ex As Exception 

    End Try 

例外是强调,当我悬停在它,它说:“抓贼抓不住型‘Microsoft.Office.Interop.Outlook.Exception’,因为它不是在' System.Exception“或从”System.Exception“继承的类。这影响了我想要放入Try/Catch块的所有其他代码。该怎么办?

+0

是什么让你觉得Outlook例外无法被捕获? – Heinzi 2011-03-25 06:47:22

+0

@Heinzi:请阅读我编辑的问题。我猜应该可以。 – CodingInCircles 2011-03-25 06:59:00

+1

谢谢,现在很清楚。我添加了另一个答案(并删除了我的旧答案)。我也冒昧地改变你的问题的标题,以便更准确地总结问题。 – Heinzi 2011-03-25 07:09:19

回答

4

好的,我现在看到了问题。

当您编写Exception时,VB会读取Microsoft.Office.Interop.Outlook.Exception(可能是因为您在代码文件的顶部有一个Import Microsoft.Office.Interop.Outlook语句)。

你需要告诉VB明确你的意思System.Exception

Try 
    ... 
Catch ex As System.Exception 
    ... 
End Try 

(由于M.O.I.O.Exception不是一个.NET异常,但只是一个Outlook COM类碰巧被称为Exception,有好多没有任何意义在试图Catch吧。)

+1

真正的问题当然就是为什么你首先要捕获'System.Exception'。你将无法处理大部分从该基类派生的异常,因此捕获它们几乎没有意义。 – 2011-03-25 07:10:10

+0

良好的捕获,另一个不直接导入Microsoft.Office.Stuff – 2011-03-25 07:14:16

+1

的理由@Cody Gray:我不会处理它们,只是保留它们的日志。 :) – CodingInCircles 2011-03-25 07:16:56

0

不存在“XXX异常无法捕获”这样的事情。它可能有一个你不知道的类型。您应该阅读您使用的库的文档并查找异常的类型。

编辑:要回答这个问题:如果你想捕获除一个异常之外的所有异常,你应该捕获所有异常并再次抛出异常。

+0

没有。解决方案永远不会无故捕捉和重新抛出异常。找出你想要捕捉的异常,并抓住那个异常。 – 2011-03-25 07:08:44

+0

主题是“如何捕获除一个之外的所有异常”。因为这是我的回应...... – cprogrammer 2011-03-25 08:33:50

+0

所以,你既没有读完整个问题,也没有提供正确的答案。为了记录,在VB.NET中,你可以简单地写出:'当不是(TypeOf ex是CustomException)时Catch ex As Exception''。正如我之前提到的,捕捉所有异常并重新抛出一个不是任何问题的正确答案,更不用说这个问题。 – 2011-03-25 10:02:12