+ =运算符是否确保在C#中进行EXPLICIT转换或隐式CASTING?

pen*_*ake 9 .net c# clr casting

以下示例编译:

public static void Main()
{
    Byte b = 255;
    b += 100;

}
Run Code Online (Sandbox Code Playgroud)

但下面的这个失败了

   public static void Main()
    {
        Byte b = 255;
        b = b + 100;
    }
Run Code Online (Sandbox Code Playgroud)

错误1无法将类型'int'隐式转换为'byte'.存在显式转换(您是否错过了演员?)

这是否意味着对于C#+ =运算符提供了EXPLICIT转换?

SLa*_*aks 11

埃里克利珀回答了你的问题连篇累牍.

预定义复合运算符的另一个有趣的方面是,如果有必要,代表您隐式插入一个演员 - 一个涉嫌"明确"的转换.如果你说

short s = 123;
s += 10;
Run Code Online (Sandbox Code Playgroud)

然后不分析为s = s + 10因为short plus int是int,所以赋值是坏的.这实际上被分析为

s = (short)(s + 10);
Run Code Online (Sandbox Code Playgroud)

因此,如果结果溢出短路,它会自动缩减为适合您的尺寸.

另见第二部分.