Why is this an issue?

When you annotate an Enum with the Flags attribute, you must not rely on the values that are automatically set by the language to the Enum members, but you should define the enumeration constants in powers of two (1, 2, 4, 8, and so on). Automatic value initialization will set the first member to zero and increment the value by one for each subsequent member. As a result, you won’t be able to use the enum members with bitwise operators.

Exceptions

The default initialization of 0, 1, 2, 3, 4, …​ matches 0, 1, 2, 4, 8 …​ in the first three values, so no issue is reported if the first three members of the enumeration are not initialized.

How to fix it

Define enumeration constants in powers of two, that is, 1, 2, 4, 8, and so on.

Code examples

Noncompliant code example

<Flags()>
Enum FruitType    ' Non-Compliant
  None
  Banana
  Orange
  Strawberry
End Enum

Module Module1
  Sub Main()
    Dim bananaAndStrawberry = FruitType.Banana Or FruitType.Strawberry
    Console.WriteLine(bananaAndStrawberry.ToString()) ' Will display only "Strawberry"
  End Sub
End Module

Compliant solution

<Flags()>
Enum FruitType    ' Compliant
  None = 0
  Banana = 1
  Orange = 2
  Strawberry = 4
End Enum

Module Module1
  Sub Main()
    Dim bananaAndStrawberry = FruitType.Banana Or FruitType.Strawberry
    Console.WriteLine(bananaAndStrawberry.ToString()) ' Will display "Banana, Strawberry"
  End Sub
End Module

Resources

Documentation