111,083
社区成员




s1= s1+1;
的时候编译器就会按照普通的表达式中的数值转换规则,以为你要写代码s1= s1+(short)1;
,但是c#根本没有定义任何将int转换为short的方法。s1+= 1;
编译器就会按照普通的直接操作寄存器的规则,理解为你要写寄存器<-s1; 寄存器 Add 1; s1<-寄存器(仅int16部分);
。这个“<-”无法翻译为c#语法,它是.net在int上将对数据进行处理的功能,不是c#的而是.net的功能。不经过c#编译器的数值转换检查。
//Reflector反编译后
short s = 1;
s = (short) (s + 1);
short s1 = 1;
short s2 = 1;
s1 = s1 + s2;