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

时间:2012-03-04 17:25:53

标签: c# .net casting clr

以下示例编译:

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

}

但下面这个失败

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

  

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

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

1 个答案:

答案 0 :(得分:11)

Eric Lippert回答了你的问题at great length

  

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

short s = 123;
s += 10;
     

然后不分析为s = s + 10因为short plus int是int,   所以作业很糟糕。这实际上被分析为

s = (short)(s + 10);
     

这样如果结果溢出短路,它会自动减少   适合你。

另见part two