关于C#:如何从try catch简化返回语句

How to simplify return's statement from try-catch

本问题已经有最佳答案,请猛点这里访问。

如何简化以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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);
}

我想避免代码重复。

有可能吗?


如果不想全部捕获,并且确实需要避免重复的代码,可以使用异常筛选器捕获特定的异常:

1
2
3
4
5
6
7
8
9
10
11
12
13
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);
}