long longVar = 100_000_000_000;
int intVar = int.MinValue;
long result = longVar % intVar;
在这个例子中,为什么结果应该很长?它不能超过Int32.MaxValue,为什么决定在这个操作中创建余数Int64?
根据C# specification,只有以下余数运算符是为整数类型预定义的:
int operator %(int x, int y);
uint operator %(uint x, uint y);
long operator %(long x, long y);
ulong operator %(ulong x, ulong y);
因此,在您的情况下,编译器选择long(long, long)
版本,并自动将intVar
强制转换为long
。然后结果是long
类型。
因为如果你尝试在这种情况下使用Int32将是OverflowException(也许)。并且有任何时刻将被投入更大的对象。例如:
int firstNumber = 10;
long secondNumber = 100;
var result = firstNumber + secondNumber;
(结果 - 长)如果你不相信我,你可以检查。
这是由于自动强制转换为特定方法的参数类型。在你的情况下,这是'%'。对于“+”符号,您可以覆盖该语句并指定您自己的此语句的实现。