Numbers can be shifted with the <<
and >>
operators,
but the right operand of the operation needs to be an int
or a type that has an implicit
conversion to int
. However, when the left operand is dynamic, the compiler’s type checking is turned
off, so you can pass anything to the right of a shift operator and have it compile. And if the argument can’t be implicitly converted to
int
at runtime, then a RuntimeBinderException will be
raised.
dynamic d = 5;
var x = d >> 5.4; // Noncompliant
x = d << null; // Noncompliant
x <<= new object(); // Noncompliant