以下示例编译:
public static void Main()
{
Byte b = 255;
b += 100;
}
但下面这个失败
public static void Main()
{
Byte b = 255;
b = b + 100;
}
带
错误1无法将类型'int'隐式转换为'byte'。存在显式转换(您是否错过了演员?)
这是否意味着C#+ =运算符提供了EXPLICIT转换?
答案 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。