如何从try-catch简化return语句[重复]
Posted
技术标签:
【中文标题】如何从try-catch简化return语句[重复]【英文标题】:How to simplify return's statement from try-catch [duplicate] 【发布时间】:2016-03-07 21:04:53 【问题描述】:如何简化以下代码:
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);
我想避免代码重复。
有可能吗?
【问题讨论】:
你想做什么?实现重试机制? 我在这里看不到异常捕获的任何目的。 如果你想避免代码重复,为什么不捕获通用基础catch (Exception)
?
【参考方案1】:
如果您不想包罗万象并且确实需要避免重复代码,则可以使用异常过滤器捕获特定异常:
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);
【讨论】:
哦。when
...这么多年的编程,实际上我刚刚学会了这个......甚至以前从未听说过这个。哇。
它只是一个 C# 6 运算符,所以还是新的 :)
啊,我明白了。看起来我很高兴看到空条件运算符、字符串插值和自动属性的默认值,但没有注意到这一点。感谢您的解释! :)
如果没有 C# 6 运算符 when
,我是否需要在 catch
中出现 throw
异常?
两者都可以。没问题。以上是关于如何从try-catch简化return语句[重复]的主要内容,如果未能解决你的问题,请参考以下文章