2015-12-03 19 views
1

我怎么能简化下面的代码简化回报的说法:如何从try-catch代码

try 
{ 
    var metadata = GetMetadata(); 
    return metadata ?? _provider.GetLatestMetadata(guid); 
} 
catch (AuthenticationException) 
{ 
    return _provider.GetLatestMetadata(guid); 
} 
catch (HttpUnauthorizedRequestException) 
{ 
    return _provider.GetLatestMetadata(guid); 
} 
catch (WebException) 
{ 
    return _provider.GetLatestMetadata(guid); 
} 
catch (VcenterException) 
{ 
    return _provider.GetLatestMetadata(guid); 
} 

我想,以避免代码重复。

可能吗?

+0

你到底想干什么?实施重试机制? –

+0

我没有看到任何异常捕捉的目的。 –

+3

如果你想避免代码重复,你为什么不抓住通用的基础'catch(Exception)'? –

回答

7

如果你不想做一个包罗万象的,真正需要避免重复的代码,你可以捕捉与异常过滤器的特殊情况例外:

try 
{ 
    var metadata = GetMetadata(); 
    return metadata ?? _provider.GetLatestMetadata(guid); 
} 
catch (Exception ex) when (ex is AuthenticationException 
          || ex is HttpUnauthorizedRequestException 
          || ex is WebException 
          || ex is VcenterException 
         ) 
{ 
    return _provider.GetLatestMetadata(guid); 
} 
+0

哦。 '什么时候...... ......这么多年的编程,实际上我只是学会了这一点...甚至从来没有听说过这个。哇哇! –

+0

它只是一个C#6操作符,所以它仍然是新的:) –

+0

啊,我明白了。看起来我很高兴看到空条件运算符,字符串插值和自动属性的默认值,并没有注意到这一点。感谢您的解释! :) –