My guess is that "o = (int)o + 1" is about the same as "d = d + 1" because they both should have one dynamic operation. To answer the question about boxing: dynamic variables have type System.Object at the CLR level (which you can see by running ildasm on the generate...