为什么DateTime.Now.Year是int而不是ushort

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

有一个从ushort到int的隐式转换,因此没有需要做的转换来完成年度的整数运算。

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


因此,一个ushort(System.UInt16)绰绰有余存储的价值和占用一半的空间。

你认为哪个“空间”被浪费了? 无论如何, DateTime不会将每个组件存储在单独的字段中。 如果你将年份存储在某个地方,可以随意将它投入到一个ushort - 并将Month为一个byte等。

请注意, ushort不符合CLS,这可能是其原因。 有很多属性是无意义的,比如string.Length等等,但是框架尽可能地符合CLS标准。


  • 单位返回一个无符号的16位整数
  • Int返回一个32位整数。
  • 我假设JIT编译器利用了CPU架构,因此在32位处理比16位处理效率更高。 我相信在使用整数与长整数(字节分配与体系结构速度)时,与VB6有类似的争论。

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

    链接地址: http://www.djcxy.com/p/60759.html

    上一篇: Why is DateTime.Now.Year an int and not a ushort

    下一篇: SSL Issue with Android