これが許可されていない理由はわかっています。
ulong x = 0xFEDCBA9876543210;
long y = Int64.MaxValue;
Console.WriteLine(x < y);
明らかに、ランタイムがいずれかのオペランドを他の型またはより大きな型に暗黙的にキャストして比較を機能させる方法はありません。
演算子「<」は、タイプ「ulong」および「long」のオペランドには適用できません。
したがって、これも許可されません ( とMinValue
を使用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);
andを<
受け入れることの過負荷はありませんが、Reflector で、これが暗黙のうちに に変換されることがわかりました。しかし、これは常に起こるわけではありません。それはどのように機能し、この不一致の理由は何ですか?ulong
long
Int64.MaxValue
ulong