2015-12-03 33 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

啊,我明白了。看起來我很高興看到空條件運算符,字符串插值和自動屬性的默認值,並沒有注意到這一點。感謝您的解釋! :) –