V3181. The result of '&' operator is '0' because one of the operands is '0'.
The analyzer has detected that there is a bitwise 'AND' (&) operation with an operand equal to 0. A code fragment may contain incorrect operator or operand.
Example:
public enum TypeAttr
{
NotPublic = 0x0,
Public = 0x1,
NestedPublic = 0x2,
NestedPrivate = 0x3
}
public static bool IsNotPublic(TypeAttr type)
{
return (type & TypeAttr.NotPublic) == TypeAttr.NotPublic;
}
The 'IsNotPublic' method checks if the argument of the 'TypeAttr' type has the 'NotPublic' flag.
Such a method of checking doesn't have any practical sense since the 'TypeAttr.NotPublic' flag has a zero value, which means using this flag as an operand of the '&' operator always results in a zero value. Thus, in the presented implementation, we always get the true condition.
The correct implementation of the check may look as follows:
public static bool IsNotPublic(TypeAttr type)
{
return type == TypeAttr.NotPublic;
}
The analyzer will also issue a warning for the use of the operand that is '0' with the '&=' operator. This code also looks questionable, because if one of the operands is '0', the result of the expression is also '0'.
This diagnostic is classified as:
You can look at examples of errors detected by the V3181 diagnostic. |