JohnGong的P之路

从小工到专家,物流信息化在路上~
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

.net数据类型小心!

Posted on 2008-04-24 09:45  小强小工  阅读(198)  评论(0编辑  收藏  举报
short s=0;
= s + 1;

short s=0;
+= 1;

这两个表达式有什么区别,会报什么错误?

头晕了,我哪到群里去问,很多朋友都说两个没有区别。

还是用事实来说话。测试:

经测试:

第一个会报错:错误 1 无法将类型“int”隐式转换为“short”。存在一个显式转换(是否缺少强制转换?) E:\MVC\Test\Test\Form1.cs 40 17 Test

第二个通过编译,运行正常。

后来找到解释:

= s + 1; 由于 1 默认是int型的,s是short的,"s+1"的结果默认是int的,把int的结果赋值给short时会报错,损失精度了,必须写成 s = (short)(s+1) 来强制转化一下

s
+=1; 在编译时已经明确最后要赋值给s,即short型的,所以会在内部自动进行转换的,
自动转换一般从低的往高的转换,所以第一个会报错