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

The analyzer has detected an issue: the type of the object calling the 'Enum.HasFlag' method is different from the type of the argument passed. Such a call will result in throwing an 'ArgumentException'.

Consider the following synthetic example:

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

Note that in this example, 'HasFlag' is called on an object of type 'TaskContinuationOptions', whereas an object of type 'TaskCreationOptions' is passed as an argument. Executing this code will result in throwing an 'ArgumentException'.

An error like that may be difficult to notice because of the similar names of the enumerations and because the 'AttachedToParent' element is found in both types.

The error can be fixed by changing either the type of the argument or the type of the calling object:

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

This diagnostic is classified as:

CWE-686