如何在 C# 中不鼓励在方法中编写多个异常
本文关键字:异常 方法 | 更新日期: 2023-09-27 17:57:00
我的代码看起来像这样:
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"
有什么指示吗?
如果您使用的是 C# 6,则可以通过异常筛选将处理限制为两种类型:
try
{
foo();
}
catch (Exception ex) when (ex is SecurityTokenValidationException || ex is SignatureVerificationFailedException)
{
Logger.ErrorFormat(ex.Message, ex);
return null;
}
因此,您不必错误地捕获SecurityTokenException的其他子类型。
例如,您可以简化返回语句,仅在某些失败时使用返回 null。
下面是一些伪代码示例:
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;
最后,我求助于使用一个异常,它是上述两个异常的基类。
换句话说,
try
{
foo();
}
catch (SecurityTokenException ex)
{
Logger.ErrorFormat(ex.Message, ex);
return null;
}
SecurityTokenValidationException1
和SignatureVerificationFailedException
都源于SecurityTokenException
。
现在,代码分析令人满意:)