C# 编译器奇怪地尝试将短结果转换为整数

C# compiler strange attempt to cast short result to integer

我正在尝试使用 2 个 short 类型的数字执行模运算:

short short1 = 1; // or any other short value
short short2 = 2;
short result = short1 % short2;

但是我得到这个编译错误:

Cannot implicitly convert type 'int' to 'short'. An explicit conversion exists (are you missing a cast?)

为什么编译器认为结果应该是 int 类型?
结果必须介于 0 和 min(short1, short2) 之间,并且这两个值都是 short

在您的情况下,short 数字在应用模块运算符之前被提升为 int ,因为余数运算符没有为小于的类型定义int

所以你有 int int.operator %(int left, int right) 并且 return 类型是 int

您可以显式转换为 short,因为您知道结果可以用 short.

表示
short result = (short)(short1 % short2);