2010-11-03 48 views
2

有没有办法在.NET中的一个catch块中捕获两个不同的异常?在一个catch块中执行两个不同的异常

我想的有点像

try {} 
catch(OverflowException ex1, FormatException ex2) 
{ 
} 

我知道我可以使用函数来重用我的catch块冗余的逻辑,但我还是好奇,是否存在这样的速记方法。

回答

1

没有速记方法存在。从C# 3.0 specification的§B.2.5,语法描述了一个特定的catch子句可能只有一个class-type和可选identifier

 
try-statement: 
    try block catch-clauses 
    try block finally-clause 
    try block catch-clauses finally-clause 

catch-clauses: 
    specific-catch-clauses general-catch-clauseopt 
    specific-catch-clausesopt general-catch-clause 

specific-catch-clauses: 
    specific-catch-clause 
    specific-catch-clauses specific-catch-clause 

specific-catch-clause: 
    catch ( class-type identifieropt ) block 

general-catch-clause: 
    catch block 

有你追不上的异常,并使用该理由吗?

+0

捕获泛型异常类型时,代码分析工具会一致。没有真正的原因。我只想知道这样的事情是否存在。 – Jonn 2010-11-03 07:42:41

0

据我所知,这是不可能的。

你可以尝试

try {} 
catch(Exception ex) 
{ 
if (ex is OverflowException) 
{ 
//do this 
} 
else if(ex is FormatException) 
{ 
//do this 
} 
} 
+1

不要忘记别人{throw; } – Josh 2010-11-03 05:29:29

+0

我想你的意思是说'if(ex是OverflowException || ex是FormatException)',因为一个结构已经存在来处理这种情况,即多个catch块。 – 2010-11-03 05:34:59

1

你可以从一个公共基础派生OverflowException和FormatException,并捕获基础。

 
try {} 
catch(exceptionBase ex1) 
{ 
} 

查看here了解关于try/catch/finally块的更多信息。

+0

OverflowException和FormatException是内置的异常,所以这不是一个选项。我已经考虑过这个自定义例外。 – Jonn 2010-11-03 07:40:44

相关问题