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

时间:2012-06-21 14:44:48

标签: .net types

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

存在从ushort到int的隐式转换,因此在年份上不需要进行转换来进行整数运算。

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

2 个答案:

答案 0 :(得分:4)

  

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

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

请注意,ushort不符合CLS,这可能就是它的原因。有一个很多的属性是有意义的无条件的,例如string.Length等......但框架试图在可能的地方符合CLS。

答案 1 :(得分:0)

  • 单元返回无符号16位整数
  • Int返回32位整数。

我假设JIT编译器利用CPU架构,因此32位处理比16位更有效。我相信在使用Integers vs Longs(Bytes allocation vs Architecture Speed)时,VB6也存在类似的争论。

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