2016-07-04 107 views
2

我需要return false防止记录如果SP.ServerException已被抛出。 但在所有其他情况下,我需要做日志记录和return false如何过滤掉catch块

try 
{ 
    folder = GetFolderByRelativeUrl(folderRelativePath); 
} 
catch (SP.ServerException serverEx) 
{ 
    //if file is not found the logging is not need 
    if (serverEx?.Message == "File not found") 
    { 
     return false; 
    } 
    //how i can go from here 
} 
catch (Exception ex) 
{ 
    //to there 
    Log(ex.Message); 
    return false; 
} 

我知道解决的办法可能是

try 
{ 
    folder = GetFolderByRelativeUrl(folderRelativePath); 
} 
catch (Exception ex) 
{ 
    //if file is not found the logging is not need 
    if (!(ex is SP.ServerException && ex?.Message == "File not found")) 
    { 
     Log(ex.Message); 
    } 

    return false; 
} 
+1

这有什么错你的代码?这似乎是合理的。我更喜欢显式的单独的catch块,用于检查if语句的类型的特殊异常情况。 – ryanyuyu

+0

我猜我的一切都很好,我的代码=) – isxaker

回答

6

尝试when关键字:

try 
{ 
    folder = GetFolderByRelativeUrl(folderRelativePath); 
} 
catch (SP.ServerException serverEx) when (serverEx.Message == "File not found") 
{ 
    return false; 
} 
catch (Exception ex) 
{ 
    //to there 
    Log(ex.Message); 
    return false; 
} 
+0

这正是我想要的 – isxaker

+0

所以随时将它标记为答案:) – Waldemar

+1

从未听说过'when'+1之前 –

2

在C#6,您可以过滤例外:

catch (SP.ServerException ex) when (ex.Message == "File not found")