Code Inspection: The pattern is redundant, it does not produce any runtime checks
C# or/and/not patterns can be useful to produce compact value checks without repeating the input value (compare
value == 1 || value == 2 with
value is 1 or 2). However, when several patterns are used together, their precedence is not that clear when one reads the expression, and this may introduce hard-to-find bugs.
Consider the following expression:
value is not 0 or -1.
If the user intends to check the
value for being not equal to both
1, this check will evaluate to
value == -1 because
is not would have higher priority than
or. To fix the pattern for the intended check, we need to add parenthesis to change the precedence:
value is not (0 or -1).
ReSharper reports such patterns, but it does not suggest any quick-fixes because the pattern could be corrected in different ways according the user intent.