Byte b = 60; b = b + 60; 会报错:Cannot implicitly convert type 'int' to 'byte'. An explicit conversion exists (are you missing a cast?) 我理解是因为运算时100为int型,统一用32为值来做加法,但是运算完把结果120赋值给b时,由于b是Byte型,所以出错!但是:为什么Byte b = 60; b += 60; 这样写就是ok的呢????? 哪位了解内部机制的解释下? 
最好是如果以后碰到类似问题,怎么调式看以自己解决问题??? 谢了!!!!

解决方案 »

  1.   

    因为60是int型,所以b+60的结果是int型,应该这样写            Byte b = 60;
                b += 60;
                Console.WriteLine(b);
      

  2.   

    b = b + 60
    1 取出b byte
    2 取出60 int
    3 加法 得到120 int 存入临时变量
    4 赋值给bb+=60
    1 取出b byte
    2 取出60 byte 强制类型转换
    3 相加直接赋值到bb++
    1 取出b并加1 存入临时变量
    2 赋值到b++b
    1 直接加1
      

  3.   


    所以你的意思就是b+=60中,系统会自动对60做强制转换成Byte类型,对吧?
      

  4.   

    应该是直接申明的就是byte类型,值为60
      

  5.   

    编译器的问题
    b=b+60  b+60是整型b+=60 60 是个常量,类型是左边的决定,b是byte型
      

  6.   

    byte b = 2;
    b = byte.Parse((b + 5).ToString()); 强制类型转换下就不会出错了
      

  7.   

    当然常量大于255也会报错! 
    byte b = 2;
     b += 256;
    常量值“256”无法转换为“byte”
      

  8.   

     
    b+=60
    .net 对应+=的操作符,都已经对类型进行了强制转换。  并且是隐式强制转换成左边(b)的类型。
      

  9.   

    大类型转小类型行
    小类型转大类型不行就是这样 呵呵
    long>int>shot>byte