我的代码看起来像这样:
try
{
foo();
}
catch (SecurityTokenValidationException ex)
{
Logger.ErrorFormat(ex.Message, ex);
return null;
}
catch (SignatureVerificationFailedException ex)
{
Logger.ErrorFormat(ex.Message, ex);
return null;
}
但代码分析报告"Avoid Excessive Complexity"
任何指针?
答案 0 :(得分:3)
如果您使用的是 C#6 ,则可以使用异常过滤将处理限制为两种类型:
try
{
foo();
}
catch (Exception ex) when (ex is SecurityTokenValidationException || ex is SignatureVerificationFailedException)
{
Logger.ErrorFormat(ex.Message, ex);
return null;
}
因此,您不必错误地捕获其他子类型的 SecurityTokenException 。
答案 1 :(得分:1)
例如,您可以通过仅在出现故障时使用return null来简化return语句。
以下是一些伪代码示例:
bool success;
try
{
success = foo();
}
catch (SecurityTokenValidationException ex)
{
Logger.ErrorFormat(ex.Message, ex);
}
catch (SignatureVerificationFailedException ex)
{
Logger.ErrorFormat(ex.Message, ex);
}
if(success)
{
return result;
}
return null;
或另一个例子。
try
{
return foo();
}
catch (SecurityTokenValidationException ex)
{
Logger.ErrorFormat(ex.Message, ex);
}
catch (SignatureVerificationFailedException ex)
{
Logger.ErrorFormat(ex.Message, ex);
}
return null;
答案 2 :(得分:1)
最后,我使用了一个例外,它是上述两个例外的基类。
换句话说,
RowDetail
try
{
foo();
}
catch (SecurityTokenException ex)
{
Logger.ErrorFormat(ex.Message, ex);
return null;
}
和SecurityTokenValidationException1
都来自SignatureVerificationFailedException
。
现在,代码分析很高兴:)