如何过滤掉catch块
问题描述:
我需要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;
}
答
尝试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;
}
答
在C#6,您可以过滤例外:
catch (SP.ServerException ex) when (ex.Message == "File not found")
这有什么错你的代码?这似乎是合理的。我更喜欢显式的单独的catch块,用于检查if语句的类型的特殊异常情况。 – ryanyuyu
我猜我的一切都很好,我的代码=) – isxaker