首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当方法在C#中被阻止时,如何在方法中写入多个异常?

当方法在C#中被阻止时,如何在方法中写入多个异常?
EN

Stack Overflow用户
提问于 2016-07-14 10:38:53
回答 3查看 125关注 0票数 3

我的代码看起来是这样的:

代码语言:javascript
复制
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"

有什么指示吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-14 12:26:43

如果使用的是C# 6,则可以使用异常筛选将处理限制在两种类型上。

代码语言:javascript
复制
try
{
    foo();
}
catch (Exception ex) when (ex is SecurityTokenValidationException || ex is SignatureVerificationFailedException)
{
    Logger.ErrorFormat(ex.Message, ex);
    return null;
}

因此,您不必错误地捕获其他SecurityTokenException的子类型。

票数 3
EN

Stack Overflow用户

发布于 2016-07-14 11:54:59

例如,您可以通过仅在发生故障时使用return来简化return语句。

下面是一些伪代码示例:

代码语言:javascript
复制
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;

或者另一个例子。

代码语言:javascript
复制
try
{
   return foo();
}
catch (SecurityTokenValidationException ex)
{
    Logger.ErrorFormat(ex.Message, ex);
}
catch (SignatureVerificationFailedException ex)
{
    Logger.ErrorFormat(ex.Message, ex);
}

return null;
票数 1
EN

Stack Overflow用户

发布于 2016-07-14 12:14:35

最后,我使用了一个异常,它是上述两个异常的基类。

换句话说,

代码语言:javascript
复制
try
{
   foo();
}
catch (SecurityTokenException ex)
{
    Logger.ErrorFormat(ex.Message, ex);
    return null;
}

SecurityTokenValidationException1SignatureVerificationFailedException都来自于SecurityTokenException

现在,代码分析是愉快的:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38372017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档