【问题标题】:Why is DateTime.Now.Year an int and not a ushort为什么 DateTime.Now.Year 是 int 而不是 ushort
【发布时间】:2012-06-21 22:51:41
【问题描述】:

在 .Net 框架的 DateTime 结构中,Year 被定义为一个 int(实际上是 A System.Int32)。但是,MSDN 文档说该值将始终为between 1 and 9999。因此,ushort (System.UInt16) 足以存储值并占用一半空间。那么为什么它是 int 而不是 ushort?

存在从 ushort 到 int 的隐式转换,因此无需进行强制转换即可对 Year 进行整数运算。

我意识到这是一个微优化问题,因此不是很重要。我只是好奇。

【问题讨论】:

标签: .net types


【解决方案1】:

因此,ushort (System.UInt16) 足以存储值并占用一半空间。

您认为“空间”在哪里被浪费了? DateTime 无论如何都不会将每个组件存储在单独的字段中。如果将年份存储在某个地方,请随意将其转换为ushort - 并将Month 转换为byte,等等。

请注意,ushort 不符合 CLS,这可能是它的原因。有很多很多属性可以设置为无符号,例如string.Length 等...但框架会尽可能地符合 CLS。

【讨论】:

    【解决方案2】:
    • unit 返回一个无符号的 16 位整数
    • Int 返回一个 32 位整数。

    我假设 JIT 编译器利用 CPU 架构,因此 32 位的处理将比 16 位更有效。我相信在使用整数与长整数(分配的字节数与架构速度)时,VB6 也存在类似的争论。

    http://blogs.msdn.com/b/davidnotario/archive/2005/08/15/451845.aspx

    【讨论】:

      猜你喜欢
      • 2012-04-21
      • 1970-01-01
      • 2019-02-08
      • 2011-09-07
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      相关资源
      最近更新 更多