如何从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语句[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java笔试面试总结—trycatchfinally语句中有return 的各类情况

20165329 第五周学习总结

如何删除return语句[重复]

如何简化此 if 语句?

javascript易错知识

函数如何返回没有return语句的东西? [重复]