CA1031 - поймать более конкретный тип исключения или перебросить исключение - PullRequest
2 голосов
/ 06 июня 2019

Я понимаю ошибку анализа кода, но кажется странным, почему в этом коде возникает ошибка:

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 расширяет исключение, вот код:

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 голосов
/ 06 июня 2019

Я думаю, что ваш код не имеет смысла, просто используйте более конкретный тип исключения вместо создания собственного типа исключения (NalpeironException), для этого вам нужно проанализировать свой код и извлечь исключения, которые могут быть вызваны Ваш код, также предпочтительно использовать типы исключений (System.Exception), уже существующие в .Net.

Вам нужно будет использовать собственный тип исключений только для более конкретных нужд (Бизнес-логика, Бизнес-правила, Управление исключениями, ....)

Проверьте ссылку ниже, это может быть полезно: https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/using-standard-exception-types

...