﻿# V3160\. Argument of incorrect type is passed to the 'Enum\.HasFlag' method\.

Анализатор обнаружил, что тип объекта, вызывающего метод 'Enum\.HasFlag', отличается от типа передаваемого аргумента\. В результате такого вызова будет выброшено исключение типа 'ArgumentException'\.

Рассмотрим синтетический пример:

```cpp
bool DoSomethingIfAttachedToParent(TaskContinuationOptions options)
{
  if (options.HasFlag(TaskCreationOptions.AttachedToParent))
  {
    // ....
    return true;
  }
  else
  {
    return false;
  }
}
```

Обратите внимание: в данном примере 'HasFlag' вызывается у объекта типа 'Task**Continuation**Options', а в качестве аргумента передаётся объект типа 'Task**Creation**Options'\. Выполнение этого кода приведёт к выбрасыванию исключения типа 'ArgumentException'\.

Заметить такую ошибку может быть непросто, так как названия перечислений схожи, а элемент 'AttachedToParent' присутствует в обоих типах\.

Чтобы поправить данный фрагмент, необходимо поменять тип аргумента или вызывающего объекта:

```cpp
bool DoSomethingIfAttachedToParent(TaskContinuationOptions options)
{
  if (options.HasFlag(TaskContinuationOptions.AttachedToParent))
  {
    // ....
    return true;
  }
  else
  {
    return false;
  }
}
```