Int64 % Int32 给出 Int64 结果

Int64 % Int32 gives Int64 result

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;

(结果 - 长) 不信可以去看看

这是由于自动转换为特定方法的参数类型。在您的情况下,这是“%”。在“+”号的情况下,您可以覆盖该语句并指定您自己对该语句的实现。