CA1031-捕获更具体的异常类型或重新抛出异常

时间:2019-06-06 08:03:48

标签: c# exception code-analysis

我了解代码分析错误,但是感觉为什么在此代码上发生错误很奇怪:

public bool IsCurrentLicenseValid()
{     
  int licenseStatusCode = 0;

  try
  {
    int licenseStatusCode = this.GetLicenseStatus();

    if (licenseStatusCode > 0)
    {
      return true;
    }

     return false;
  }
  catch (NalpeironException)
  // catch (NalpeironException ex), but now: the variable ex is declared but never used
  {
    DiagnosticsService.Instance.Trace(
      TraceFilters.Services, 
      "NalpeironLicensingService.IsCurrentLicenseValid", 
      $"License status indicates error '{licenseStatusCode}'");

    // the error goes away if I use ex in the message (i.e. ex.Message)

    return false;
  }
}

我在catch语句中捕获了特定异常,我只是不想使用异常消息或其他异常属性。是这里唯一的抑制此消息的解决方案吗?还是应该使用某些异常属性或方法?

NalpeironException扩展了Exception,这是代码:

public class NalpeironException : Exception
{
    private Enum errorId;

    public NalpeironException(Enum errorId, string message, Exception inner) : base(message, inner)
    {
        this.errorId = errorId;
    }

    public Enum ErrorId
    {
        get { return this.errorId; }
        set { this.errorId = value; }
    }

    public bool IsEqualId(Enum errorId)
    {
        return this.ErrorId.GetType() == errorId.GetType() && this.ErrorId.Equals(errorId);
    }
}

更新

正确的方法是在诊断服务中使用NalpeironException消息。为了文字记录异常信息。恐怕我做不到,因为该代码已经由其他人编写,并且该应用程序已经发货。

1 个答案:

答案 0 :(得分:0)

我认为您的代码没有任何意义,只是使用一种更具体的异常类型,而不是创建自己的异常类型(NalpeironException),因为您必须分析代码并提取可以由代码引起的,最好使用.Net中已经存在的异常(System.Exception)类型。

您仅需要将自己的异常类型用于更具体的需求(业务逻辑,业务规则,异常管理...。)

查看下面的链接可能会有所帮助:   https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/using-standard-exception-types