代码之家  ›  专栏  ›  技术社区  ›  RCIX

为什么我需要将此代码包装为一个强制转换?

  •  5
  • RCIX  · 技术社区  · 15 年前

    如果我有如下代码:

    short myShortA = 54;
    short myShortB = 12;
    short myShortC = (short)(myShortA - myShortB);
    

    两个操作数都是短的,而且都会变短,所以为什么我要把它转换成短的呢?

    2 回复  |  直到 15 年前
        1
  •  11
  •   Jon Skeet    15 年前

    因为没有“短-短”运算符。两个操作数都提升为int。

    根据C 3规范第7.7.5节:

    预定义的减法运算符 如下所示。所有操作员 从x减去y。

    • 整数减法:

      int operator –(int x, int y);
      uint operator –(uint x, uint y);
      long operator –(long x, long y); 
      ulong operator –(ulong x, ulong y);
      

      在选中的上下文中,如果差异是 在结果类型的范围之外, 引发System.OverflowException。

    (然后是浮点减法。)

        2
  •  1
  •   Siewers    15 年前

    为了使事情简单一点,您可以简单地编写如下扩展方法:

    public static class NumericExtensions
    {
        public static short Subtract(this short target, short value)
        {
            return (short)(target - value);
        }
    }
    

    其他人回答了你的问题…:)