我知道为什么不允许这样做:
ulong x = 0xFEDCBA9876543210;
long y = Int64.MaxValue;
Console.WriteLine(x < y);
显然,运行时无法将操作数隐式转换为其他类型或更大的类型以进行比较。
运算符“<”不能应用于“ulong”和“long”类型的操作数。
因此,这也是不允许的(使用MinValue
and const
):
ulong x = 0xFEDCBA9876543210;
const long y = Int64.MinValue;
Console.WriteLine(x < y);
然而,这是允许的(MaxValue
而不是):
ulong x = 0xFEDCBA9876543210;
const long y = Int64.MaxValue;
Console.WriteLine(x < y);
<
接受 aulong
并没有过载long
,但我在 Reflector 中看到它会默默地转换Int64.MaxValue
为 a ulong
。但这并不总是发生。它是如何工作的,这种不一致的原因是什么?