C# 如何过滤掉捕捉块

C# 如何过滤掉捕捉块,c#,.net,exception,try-catch,C#,.net,Exception,Try Catch,如果抛出了SP.ServerException,我需要返回false阻止日志记录。 但在所有其他情况下,我也需要做日志记录并返回false try { folder = GetFolderByRelativeUrl(folderRelativePath); } catch (SP.ServerException serverEx) { //if file is not found the logging is not need if (serverEx?.Message

如果抛出了
SP.ServerException
,我需要
返回false
阻止日志记录。 但在所有其他情况下,我也需要做日志记录并返回false

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;
}

当关键字:

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;
}
在c#6中,您可以过滤异常:

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

你的代码怎么了?这似乎是合理的。对于特殊的异常情况,我更喜欢显式的单独catch块,而不是类型检查if语句。我想我的代码=)一切都很好。这正是我想知道的,在+1之前,当它是C#6的一个特性时,我从来没有听说过它