Timespan.Hour,从-23到23的范围返回为什么它是int32?

时间:2012-03-23 10:46:15

标签: .net design-patterns struct

在TimeSpan类中玩了一下,我开始想知道为什么timepan类的属性都是int32s?

我理解为什么构造函数在创建时间跨度时会使用int32,但是如果你查看MSDN文档,它会说明:

  

"当前TimeSpan结构的小时组件。回报   值范围从-23到23。"

并且该属性看起来像这样

  

public int Hours {get; }

我的第一个本能认为我是在与TimeSpan.TotalHours分享某种数据,但那是双倍的。

有没有理由认为这是一个int32而不是我完全忽略的int8?或者我错过了结构中的隐藏功能吗?

2 个答案:

答案 0 :(得分:2)

处理32位整数与处理较小的精度(例如Int16或字节)在性能方面没有区别。

所以这里的一致性比在这里和那里保存几个字节更重要。

另一个可能出现的问题是,当你尝试在较小的整数上运行操作(加法,乘法)时,你冒着溢出的风险,或者你必须转换为更大的整数。

答案 1 :(得分:1)

int8(a.k.a。SByte):

  

此API不符合CLS。符合CLS的替代方案是Int16。

如果他们决定在框架内的核心类库中公开非CLS兼容类型,那将是不寻常的。所以int8肯定是错误的选择。然后,正如@Aliostad所说,事实是在实际操作期间,较短的积分值往往被视为完整的32位值 - 因此使用较小的类型没有性能优势。