Анализатор обнаружил, что тип объекта, вызывающего метод 'Enum.HasFlag', отличается от типа передаваемого аргумента. В результате такого вызова будет выброшено исключение типа 'ArgumentException'.
Рассмотрим синтетический пример:
bool DoSomethingIfAttachedToParent(TaskContinuationOptions options) { if (options.HasFlag(TaskCreationOptions.AttachedToParent)) { // .... return true; } else { return false; } }
Обратите внимание: в данном примере 'HasFlag' вызывается у объекта типа 'TaskContinuationOptions', а в качестве аргумента передаётся объект типа 'TaskCreationOptions'. Выполнение этого кода приведёт к выбрасыванию исключения типа 'ArgumentException'.
Заметить такую ошибку может быть непросто, так как названия перечислений схожи, а элемент 'AttachedToParent' присутствует в обоих типах.
Чтобы поправить данный фрагмент, необходимо поменять тип аргумента или вызывающего объекта:
bool DoSomethingIfAttachedToParent(TaskContinuationOptions options) { if (options.HasFlag(TaskContinuationOptions.AttachedToParent)) { // .... return true; } else { return false; } }
Данная диагностика классифицируется как: